home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-12-31 | 129.2 KB | 3,390 lines | [TEXT/R*ch] |
- C.S.M.P. Digest Sat, 10 Jun 95 Volume 3 : Issue 100
-
- Today's Topics:
-
- Anyone doing lots of PPC assembly language?
- Can one do custom controls w-o CDEFs?
- Extracting data from AEDescs
- Getting rid of Option-
- How to disable Text Item ?
- To OOP or not to OOP. That...
- TransSkel 3.20 is available (CW 6 - SC++ 8)
- malloc vs. NewPtr
- newbie. How to get open file dialog box.
-
-
-
- The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
- (pottier@clipper.ens.fr).
-
- The digest is a collection of article threads from the internet newsgroups
- comp.sys.mac.programmer.help, csmp.tools and csmp.misc. It is designed for
- people who read news semi-regularly and want an archive of the discussions.
- If you don't know what a newsgroup is, you probably don't have access to
- it. Ask your systems administrator(s) for details. If you don't have access
- to news, you may still be able to post messages to the group by using a
- mail server like anon.penet.fi (mail help@anon.penet.fi for more
- information).
-
- Each issue of the digest contains one or more sets of articles (called
- threads), with each set corresponding to a 'discussion' of a particular
- subject. The articles are not edited; all articles included in this digest
- are in their original posted form (as received by our news server at
- nef.ens.fr). Article threads are not added to the digest until the last
- article added to the thread is at least two weeks old (this is to ensure that
- the thread is dead before adding it to the digest). Article threads that
- consist of only one message are generally not included in the digest.
-
- The digest is officially distributed by two means, by email and ftp.
-
- If you want to receive the digest by mail, send email to listserv@ens.fr
- with no subject and one of the following commands as body:
- help Sends you a summary of commands
- subscribe csmp-digest Your Name Adds you to the mailing list
- signoff csmp-digest Removes you from the list
- Once you have subscribed, you will automatically receive each new
- issue as it is created.
-
- The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
- Questions related to the ftp site should be directed to
- scott.silver@dartmouth.edu.
-
- -------------------------------------------------------
-
- >From junkster@chinook.halcyon.com (James Hague)
- Subject: Anyone doing lots of PPC assembly language?
- Date: 15 May 1995 01:20:52 GMT
- Organization: Northwest Nexus, Inc. - Professional Internet Services
-
- I know that you'd have to be an idiot to write lots of PPC assembly
- (other than for code generators) and I know that Apple recommends against
- it, but still: Is anyone out there writing significant portions of an
- app or game or whatever in PowerPC assembly? I'd love to hear what you
- have to say.
-
- James Hague
- junkster@halcyon.com
-
- +++++++++++++++++++++++++++
-
- >From allender@prairienet.org (Mark W. Allender)
- Date: 16 May 1995 20:27:29 GMT
- Organization: Prairienet, the East-Central Illinois Free-Net
-
- sandor (sbrb@cats.ucsc.edu) wrote:
-
- : What is needed is an (inline) PPC assembler from Metrowerks, asap.
- ^^^^^^^^
-
- This is *key*. Not only for PPC and 68K as well. I really dislike
- having only function level asm available to me.
-
- PC compilers have had inline asm for a while. This is one area of mac
- programming that needs to catch up. (But I will say that CW's profiling
- is really boss!)
-
- --
- -Mark Allender
- -Parallax Software
- -allender@prairienet.org
-
- +++++++++++++++++++++++++++
-
- >From pj@stacken.kth.se (Patrik Johansson)
- Date: Tue, 16 May 1995 22:01:24 +0200
- Organization: KTH
-
-
- >
- > Only problem is the manuals. They do 64 bit implementations mixed
- > in with 32 bit implementations and 64 bit running in '32 bit mode'.
- > The notation can drive you crazy. But again, once you get the hang
- > of it, it all makes sense.
- >
- > What is needed is an (inline) PPC assembler from Metrowerks, asap.
-
- What is the best Reference book for PPC programming? Note, i am not looking
- for a talkative tutorial with lots of pictures etc, a reference manual!
-
- Pj
-
- +++++++++++++++++++++++++++
-
- >From english@primenet.com (Lawson English)
- Date: 16 May 1995 21:57:28 GMT
- Organization: Primenet Services for the Internet (602)395-1010
-
- Mark W. Allender (allender@prairienet.org) wrote:
- : sandor (sbrb@cats.ucsc.edu) wrote:
-
- : : What is needed is an (inline) PPC assembler from Metrowerks, asap.
- : ^^^^^^^^
-
- : This is *key*. Not only for PPC and 68K as well. I really dislike
- : having only function level asm available to me.
-
- I don't see it as that big an issue. Sure, the Symantec in-line assembler
- for 68K is nice (do they have one for PPC?), but with PPC code, I think
- that I would PREFER to have function-level asm, as that way I don't have
- to try and second-guess the compiler while its doing register-coloring
- optimizations or somesuch.
-
- I understand that CW 6 STILL doesn't have that PPC assembler?
-
-
-
- --
- - -----------------------------------------------------------------------------
- Lawson English __ __ ____ ___ ___ ____
- english@primenet.com /__)/__) / / / / /_ /\ / /_ /
- / / \ / / / / /__ / \/ /___ /
- - -----------------------------------------------------------------------------
-
- +++++++++++++++++++++++++++
-
- >From junkster@coho.halcyon.com (James Hague)
- Date: 16 May 1995 19:50:48 GMT
- Organization: Northwest Nexus, Inc. - Professional Internet Services
-
- In article <3paej2$npc@vixen.cso.uiuc.edu>,
- >James Hague (junkster@chinook.halcyon.com) wrote:
- >: I know that you'd have to be an idiot to write lots of PPC assembly
- >
- >I don't understand what the taboo is on doing PPC assembly. Assembly code
- >is assembly code in my book (aside from the obvious differences).
-
- Heck, I don't have a problem with it. In fact, I'd love to get my hands
- on a decent PPC assembler so I could jump right in. I've always found
- assembly language programming to be fun.
-
- My comments were mostly to calm the religious masses. I've seen far too
- many people get attacked for not bowing down to Apple.
-
- Anyhow, what's available for doing PPC assembly? MOPS and PowerMacForth
- both have assemblers (MOPS is still a 68K system, though). Codwarrior 6
- was supposed to support it, but I haven't heard for sure. The Fantasm
- folk claim that v4 will generate PPC code, but that's likely a long way
- off. And there's the MPW assembler from Apple--ick.
-
- James Hague
- junkster@halcyon.com
-
- +++++++++++++++++++++++++++
-
- >From gamares@mailhost.ecn.uoknor.edu (Gabe Mares)
- Date: Tue, 16 May 1995 17:21:11 -0600
- Organization: University of Oklahoma
-
- In article <sbrb-1605950744260001@sandor23.slip.crl.com>,
- sbrb@cats.ucsc.edu (sandor) wrote:
-
- > What is needed is an (inline) PPC assembler from Metrowerks, asap.
-
- Amen. But not _only_ PPC. We need 68K inline as well. Something like
- asm68K {...} and asmPPC {...}.
-
- Gabe
-
- +++++++++++++++++++++++++++
-
- >From english@primenet.com (Lawson English)
- Date: 16 May 1995 23:41:20 GMT
- Organization: Primenet Services for the Internet (602)395-1010
-
- James Hague (junkster@coho.halcyon.com) wrote:
- [snitpt]
- : Anyhow, what's available for doing PPC assembly? MOPS and PowerMacForth
- : both have assemblers (MOPS is still a 68K system, though). Codwarrior 6
- : was supposed to support it, but I haven't heard for sure. The Fantasm
- : folk claim that v4 will generate PPC code, but that's likely a long way
- : off. And there's the MPW assembler from Apple--ick.
-
-
- Word I have is that CW6 comes with PPCAsm in the MPW folder.
-
- Ick indeed.
-
- --
- - -----------------------------------------------------------------------------
- Lawson English __ __ ____ ___ ___ ____
- english@primenet.com /__)/__) / / / / /_ /\ / /_ /
- / / \ / / / / /__ / \/ /___ /
- - -----------------------------------------------------------------------------
-
- +++++++++++++++++++++++++++
-
- >From english@primenet.com (Lawson English)
- Date: 16 May 1995 23:52:33 GMT
- Organization: Primenet Services for the Internet (602)395-1010
-
- Patrik Johansson (pj@stacken.kth.se) wrote:
-
- : >
- : > Only problem is the manuals. They do 64 bit implementations mixed
- : > in with 32 bit implementations and 64 bit running in '32 bit mode'.
- : > The notation can drive you crazy. But again, once you get the hang
- : > of it, it all makes sense.
- : >
- : > What is needed is an (inline) PPC assembler from Metrowerks, asap.
-
- : What is the best Reference book for PPC programming? Note, i am not looking
- : for a talkative tutorial with lots of pictures etc, a reference manual!
-
- _Optimizing PowerPC Code_ by Gary Kacmarcik is currently the only book
- available. I've heard that there is a *compiler* book for PowerPC coming
- soon.
-
- You also have the 601/604/6xx User's Manuals from IBM and Motorola.
-
-
-
- --
- - -----------------------------------------------------------------------------
- Lawson English __ __ ____ ___ ___ ____
- english@primenet.com /__)/__) / / / / /_ /\ / /_ /
- / / \ / / / / /__ / \/ /___ /
- - -----------------------------------------------------------------------------
-
- +++++++++++++++++++++++++++
-
- >From allender@prairienet.org (Mark W. Allender)
- Date: 17 May 1995 00:32:59 GMT
- Organization: Prairienet, the East-Central Illinois Free-Net
-
- Lawson English (english@primenet.com) wrote:
- : James Hague (junkster@coho.halcyon.com) wrote:
- : : off. And there's the MPW assembler from Apple--ick.
-
- : Ick indeed.
-
- Not to sound naive (it is possible), but what is wrong with that assembler?
- It works fine for me.
-
- --
- -Mark Allender
- -Parallax Software
- -allender@prairienet.org
-
- +++++++++++++++++++++++++++
-
- >From english@primenet.com (Lawson English)
- Date: 17 May 1995 01:20:17 GMT
- Organization: Primenet Services for the Internet (602)395-1010
-
- Mark W. Allender (allender@prairienet.org) wrote:
- : Lawson English (english@primenet.com) wrote:
- : : James Hague (junkster@coho.halcyon.com) wrote:
- : : : off. And there's the MPW assembler from Apple--ick.
-
- : : Ick indeed.
-
- : Not to sound naive (it is possible), but what is wrong with that assembler?
- : It works fine for me.
-
- Indeed it does. HOwever, it is really difficult to learn to use, IMHO,
- and 1) requires that you have MPW and 2) that you know how to use MPW.
-
- The documentation is "spotty" shall we say?
-
-
-
- --
- - -----------------------------------------------------------------------------
- Lawson English __ __ ____ ___ ___ ____
- english@primenet.com /__)/__) / / / / /_ /\ / /_ /
- / / \ / / / / /__ / \/ /___ /
- - -----------------------------------------------------------------------------
-
- +++++++++++++++++++++++++++
-
- >From english@primenet.com (Lawson English)
- Date: 17 May 1995 03:26:17 GMT
- Organization: Primenet Services for the Internet (602)395-1010
-
- sandor (sbrb@cats.ucsc.edu) wrote:
-
- : > I don't understand what the taboo is on doing PPC assembly. Assembly code
- : > is assembly code in my book (aside from the obvious differences).
-
- : Agreed ! In fact PPC assembly was a lot easier to learn and use
- : that 68K (let alone x86). It is a bit strange at first because of
- : being a load store architecture. But once over that it goes smoothly.
-
-
- How are you at scheduling so that the pipelines remain full? What about
- 604 vs 601 optimization?
-
-
- --
- - -----------------------------------------------------------------------------
- Lawson English __ __ ____ ___ ___ ____
- english@primenet.com /__)/__) / / / / /_ /\ / /_ /
- / / \ / / / / /__ / \/ /___ /
- - -----------------------------------------------------------------------------
-
- +++++++++++++++++++++++++++
-
- >From dmatiske@degas.helios.nd.edu (david matiskella)
- Date: 17 May 1995 04:02:18 GMT
- Organization: University of Notre Dame
-
- In article <3pbqcp$74o@news.primenet.com>, english@primenet.com (Lawson English) writes:
- |> sandor (sbrb@cats.ucsc.edu) wrote:
- |>
- |> : > I don't understand what the taboo is on doing PPC assembly. Assembly code
- |> : > is assembly code in my book (aside from the obvious differences).
- |>
- |> : Agreed ! In fact PPC assembly was a lot easier to learn and use
- |> : that 68K (let alone x86). It is a bit strange at first because of
- |> : being a load store architecture. But once over that it goes smoothly.
- |>
- |>
- |> How are you at scheduling so that the pipelines remain full? What about
- |> 604 vs 601 optimization?
- |>
- |>
- |> --
- |> -------------------------------------------------------------------------------
- |> Lawson English __ __ ____ ___ ___ ____
- |> english@primenet.com /__)/__) / / / / /_ /\ / /_ /
- |> / / \ / / / / /__ / \/ /___ /
- |> -------------------------------------------------------------------------------
- I assume he doing it by hand. For 601/603/604 optimization you
- have to either pick one or pick the code which gives acceptable
- performance on all three. Nothing new. Optimum pentium code isn't
- optimum 486 code. Similiar Optium 68K is not the same as otptium
- 68040 code. It's not some new problem. Personally I would
- optimize for the 601 since A) you can buy a system that uses
- it, B) it's most likely going to be the slowest of the 3.
-
- +++++++++++++++++++++++++++
-
- >From pchang@csd-d-3.Stanford.EDU (The Weasel)
- Date: 17 May 1995 06:36:23 GMT
- Organization: Computer Science Department, Stanford University, CA USA.
-
- In article <3pbj0h$s4k@news.primenet.com>,
- Lawson English <english@primenet.com> wrote:
- > The documentation is "spotty" shall we say?
-
- Huh? I found the documentation to be fine. At least it was all in one
- place as opposed to the rest of the mpw docs. One thing that made me
- grumpy though was that it was basically the ibm assembler rather than
- following the lead of the previous 68k mpw assemblers with directives
- like while etc.
-
- This is, of course, all my own opinion.
-
- Peter
- --
- ObURL: <a href="http://xenon.stanford.edu/~pchang/bhh.html">
- ObQuote: Chi non ha paura di morire muore una volta sola.
- -- Giovanni Falcone
-
-
- +++++++++++++++++++++++++++
-
- >From sbrb@cats.ucsc.edu (sandor)
- Date: Wed, 17 May 1995 08:03:27 -0800
- Organization: CRL Dialup Internet Access
-
- In article <3pbqcp$74o@news.primenet.com>, english@primenet.com (Lawson
- English) wrote:
-
- > How are you at scheduling so that the pipelines remain full? What about
- > 604 vs 601 optimization?
-
- The IBM/Motorola manuals (e.g. PowerPC 604 RISC Microprocessor User's
- Manual) contain detailed examples of how the pipeline works. They also
- have info on how to schedule your code (see for example section 6.6 in
- the 604 User's manual). There is nothing obscure or tricky about it.
- >From what I can tell, it is mostly common sense once you see how the
- pipelines work -- although I'm sure that experience helps. I also go
- through the CW compiler output and also look in ROM to see what IBM
- and Apple do. Would appreciate seeing more informative examples posted
- here by the experts (e.g. last year Tim Olson at Apple Computer/Somerset
- posted several interesting code examples).
-
- There are some differences between the 601 and 604 but they don't seem
- to be a major matter. What I have done is concentrate on the 604 (there
- are none of the old POWER ops to tempt one, e.g. when a 64 bit divide is
- needed). And the manual is more readable. In fact the 604 (on paper) looks
- like a really great chip -- with its 3 integer pipelines, etc.
-
- But at present don't have a 604 to program ! Am waiting patiently. Believe
- that one facility it has, that the 601 doesn't, is a "nanosecond" timer
- (used via the mftb op). Am I correct about this ? If so, this could help
- with checking how well ones code is doing. Does anyone know about this ?
- I found the manuals rather inconclusive.
-
- Nick Burgoyne <sbrb@cats.ucsc.edu> 17 May 1995
-
- +++++++++++++++++++++++++++
-
- >From english@primenet.com (Lawson English)
- Date: 17 May 1995 16:37:47 GMT
- Organization: Primenet Services for the Internet (602)395-1010
-
- Mark W. Allender (allender@prairienet.org) wrote:
- : James Hague (junkster@chinook.halcyon.com) wrote:
- : : I know that you'd have to be an idiot to write lots of PPC assembly
-
- : Why?
-
- : : (other than for code generators) and I know that Apple recommends against
- : : it, but still: Is anyone out there writing significant portions of an
- : : app or game or whatever in PowerPC assembly? I'd love to hear what you
- : : have to say.
-
- : Apple recommends against a lot of things -- and I mostly ignore those
- : things that I believe that I should. With that said:
-
- Actually, Apple recommends that you code it in C that is optimized for
- algorithms and data structures first and benchmark that to see where you
- need to go to assembler. And once you've gone to assembler, make sure
- that it really IS faster than C that has been optimized for algorithms
- and data structures.
-
- They dont' recommend that you not use assembler -only that you be sure
- that assembler is actually faster.
-
- : Parallax will probably be doing quite a bit of PPC assembly for Descent.
- : We have to. Otherwise, frame rate will be _slow_ -- and I mean really
- : slow, compared to what it could be.
-
- Yer a better man than I, Gunga Din... Or are you worried about CopyBits
- issues?
-
- : I don't understand what the taboo is on doing PPC assembly. Assembly code
- : is assembly code in my book (aside from the obvious differences).
-
-
- Folks are lazy, mostly, and RISC CPUs are designed to make compilers
- efficient, so why bother when you don't have to?
-
- If you have to, you have to.
-
- What bottle-necks are you finding where assembler is that far superior to
- C, BTW?
-
- --
- - -----------------------------------------------------------------------------
- Lawson English __ __ ____ ___ ___ ____
- english@primenet.com /__)/__) / / / / /_ /\ / /_ /
- / / \ / / / / /__ / \/ /___ /
- - -----------------------------------------------------------------------------
-
- +++++++++++++++++++++++++++
-
- >From junkster@chinook.halcyon.com (James Hague)
- Date: 17 May 1995 16:28:21 GMT
- Organization: Northwest Nexus, Inc. - Professional Internet Services
-
- Mark W. Allender <allender@prairienet.org> wrote:
- >: : off. And there's the MPW assembler from Apple--ick.
- >
- >: Ick indeed.
- >
- >Not to sound naive (it is possible), but what is wrong with that assembler?
- >It works fine for me.
-
- Possibly nothing. Except that you have to buy and use MPW in order to
- get it.
-
- James Hague
- junkster@halcyon.com
-
- +++++++++++++++++++++++++++
-
- >From kevinw@reflective.com (Kevin Warne)
- Date: 17 May 1995 16:20:55 GMT
- Organization: Reflective Software
-
- In article <3pb748$a61@news.primenet.com>, english@primenet.com (Lawson English) says:
- >I don't see it as that big an issue. Sure, the Symantec in-line assembler
- >for 68K is nice (do they have one for PPC?), but with PPC code, I think
- >that I would PREFER to have function-level asm, as that way I don't have
- >to try and second-guess the compiler while its doing register-coloring
- >optimizations or somesuch.
-
- Watcom C++ (for x86) has great support for this sort of thing. You
- specify the registers/memory that you read/write in your inline assembly
- and you specify calling conventions in terms of register setup/return
- (so it's even type-safe!) and their optimizer will generate code to
- match. Pity that more compilers don't support this level of inline
- assembly...
-
- Regards,
- Kevin
-
- ____
- Kevin Warne / kevinw@reflective.com / DDD +1(604)683-0977 / FAX +1(604)598-9546
- Reflective Software Corporation
- 2660 Estevan Ave, Victoria, BC, CANADA V8R 2T4
- Warne's Garbage Collector (WGC) = Fastest C++ heap manager, email for demo app
-
- +++++++++++++++++++++++++++
-
- >From philip@cs.uct.ac.za (Philip Machanick)
- Date: 18 May 1995 06:44:34 GMT
- Organization: Computer Science Dept, Wits University
-
- In article <3pd875$90q@news1.halcyon.com>, junkster@chinook.halcyon.com
- (James Hague) wrote:
-
- >>Possibly nothing. Except that you have to buy and use MPW in order to
- >get it.
-
- Or CW6 from what I hear -- though it probably still runs in MPW.
- --
- Philip Machanick
- Computer Science Department, University of the Witwatersrand
- 2050 Wits, South Africa
- philip@cs.wits.ac.za 27(11)716-3309 fax 339-7965
-
- +++++++++++++++++++++++++++
-
- >From jmunkki@beta.hut.fi (Juri Munkki)
- Date: 18 May 1995 18:03:44 GMT
- Organization: Helsinki University of Technology
-
- In article <3paej2$npc@vixen.cso.uiuc.edu> allender@prairienet.org (Mark W. Allender) writes:
- >James Hague (junkster@chinook.halcyon.com) wrote:
- >: I know that you'd have to be an idiot to write lots of PPC assembly
- >
- >Parallax will probably be doing quite a bit of PPC assembly for Descent.
- >We have to. Otherwise, frame rate will be _slow_ -- and I mean really
- >slow, compared to what it could be.
- >
- >I don't understand what the taboo is on doing PPC assembly. Assembly code
- >is assembly code in my book (aside from the obvious differences).
-
- I agree quite totally. If a person wants to use assembly language, then
- he/she should be allowed to use it. At least MWC doesn't seem to be able
- to generate very fast code for the PPC... I tried contacting tonyn@tiac.net
- about his assembler, but he hasn't replied. I guess I could use PPCAsm,
- since I have access to ETO disks, but I'm not very enthusiastic about
- touching MPW.
-
- I still think that MetroWorks C or Symantec C should provide inline
- PPC and 68020 assembly (MWC only does plain 68K). If you compare the
- task of writing a C compiler and that of writing an assembler, the
- assembler seems trivial in comparison. I just want to be able to
- access my C structures and variables from assembly, so an inline
- assembler (like the one in Think C) is the ideal solution.
-
- On the 68K, my C versions are about twice as slow as the optimized
- assembly language. On the PowerPC things are slightly better because
- it has more registers, but I still see a lot of room for improvement.
-
- --
- Juri Munkki jmunkki@hut.fi There ain't no such thing as a shareware lunch.
- http://www.hut.fi/~jmunkki Windsurfing: Faster than the wind.
-
- +++++++++++++++++++++++++++
-
- >From phils@bedford.symantec.com (Phil Shapiro)
- Date: Thu, 18 May 1995 16:38:21 -0400
- Organization: Symantec Corp.
-
- In article <3pd875$90q@news1.halcyon.com>, junkster@chinook.halcyon.com
- (James Hague) wrote:
-
- | Mark W. Allender <allender@prairienet.org> wrote:
- | >: : off. And there's the MPW assembler from Apple--ick.
- | >
- | >: Ick indeed.
- | >
- | >Not to sound naive (it is possible), but what is wrong with that assembler?
- | >It works fine for me.
- |
- | Possibly nothing. Except that you have to buy and use MPW in order to
- | get it.
-
- Actually, the SDA #3 CD includes a pre-release copy of an SPM integrated
- version of Apple's PPCAsm assembler. It's a drop-in translator for the 8.0
- SPM.
-
- -phil
-
- +++++++++++++++++++++++++++
-
- >From Heiner Wolf <wolf@informatik.uni-ulm.de>
- Date: 18 May 1995 16:02:40 GMT
- Organization: University of Ulm, Germany
-
- > I know that you'd have to be an idiot to write lots of PPC assembly
- > (other than for code generators) and I know that Apple recommends against
- > it, but still: Is anyone out there writing significant portions of an
- > app or game or whatever in PowerPC assembly? I'd love to hear what you
- > have to say.
-
- We are coding the kernal of a JPEG image decompressor in assembler.
-
- Yes, I know. The compilers are so good and it is not neccessary. But if I can
- spare a single instruction per color component per pixel at 20 320x240 frames
- per second then its worth the effort.
-
- --
- Klaus H.Wolf
- ethernet: 08:00:20:12:2a:01
- internet: wolf@informatik.uni-ulm.de
-
-
- +++++++++++++++++++++++++++
-
- >From rmcassid@uci.edu (Robert Cassidy)
- Date: Thu, 18 May 1995 16:53:33 -0700
- Organization: UC Irvine
-
- In article <3pg260$n1i@nukkekoti.cs.hut.fi>, jmunkki@beta.hut.fi (Juri
- Munkki) wrote:
-
- > In article <3paej2$npc@vixen.cso.uiuc.edu> allender@prairienet.org (Mark
- W. Allender) writes:
-
- > >I don't understand what the taboo is on doing PPC assembly. Assembly code
- > >is assembly code in my book (aside from the obvious differences).
-
- > I agree quite totally. If a person wants to use assembly language, then
- > he/she should be allowed to use it. At least MWC doesn't seem to be able
- > to generate very fast code for the PPC... I tried contacting tonyn@tiac.net
- > about his assembler, but he hasn't replied. I guess I could use PPCAsm,
- > since I have access to ETO disks, but I'm not very enthusiastic about
- > touching MPW.
-
- I don't think that PPC assembly it totally taboo - just that there are
- strong warnings in place that it is a lot harder to improve over the
- compiler. There are lots of hard-core assembly programmers that swear up
- and down that assembly is the *only* way to go - C is for wusses. These
- people, for a large project, will probably not gain significantly (if at
- all) over the programmer that starts in C and optimizes little areas in
- assembly. They might have gotten away with it on an 040 or 486, but I
- think a PPC would break them.
-
- The other problem is that I believe the differences between the 601, 603,
- 604, 620, etc. are significant enough that all of those extra hours put
- into the assembly might be wasted once you run on the next chip - the
- compiler (assuming that it's been updated) should be smart enough to
- either 1) tailor your code easily to the chip or 2) avoid doing anything
- truly criminal to any one chip - sort of the lesser of all evils approach.
-
- --
- Bob Cassidy
- UC Irvine
-
- +++++++++++++++++++++++++++
-
- >From allender@prairienet.org (Mark W. Allender)
- Date: 19 May 1995 13:16:01 GMT
- Organization: Prairienet, the East-Central Illinois Free-Net
-
- Robert Cassidy (rmcassid@uci.edu) wrote:
-
- : I don't think that PPC assembly it totally taboo - just that there are
- : strong warnings in place that it is a lot harder to improve over the
- : compiler. There are lots of hard-core assembly programmers that swear up
-
- This argument over asm vs. C has been around for a long time. Compilers
- for the PC generate really great code (watcom in particular). But you know
- what, hand optimizing in asm in the most crucial spots can *always* be a
- win. Why? Because *you* know about the structure of your program, and how
- you can treat register allocation. You may not always get a great speedup
- over the compiler, but in most cases, I believe that it is worth the effort
- (if you choose your battles carefully).
-
- I have yet to see MWC generate the best code possible for my leaf routines
- -- and those are the ones that are getting called 10's of thousands of
- times per frame.
-
- I have achieved a 20-30% speedup just by rewriting around 10 crucial
- routines in asm. The point -- if you care about speed, then you should
- know how to optimize properly in asm!
-
- --
- -Mark Allender
- -Parallax Software
- -allender@prairienet.org
-
- +++++++++++++++++++++++++++
-
- >From rmcassid@uci.edu (Robert Cassidy)
- Date: Fri, 19 May 1995 10:50:00 -0700
- Organization: UC Irvine
-
- In article <3pi5mh$657@vixen.cso.uiuc.edu>, allender@prairienet.org (Mark
- W. Allender) wrote:
-
- > You may not always get a great speedup
- > over the compiler, but in most cases, I believe that it is worth the effort
- > (if you choose your battles carefully).
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
- *That's* why the warning is there.
-
- --
- Bob Cassidy
- UC Irvine
-
- +++++++++++++++++++++++++++
-
- >From Edmond Underwood <underwoe@booboo.Colorado.Edu>
- Date: 20 May 1995 00:31:13 GMT
- Organization: Rocky Mountain Internet Inc.
-
- >The IBM/Motorola manuals (e.g. PowerPC 604 RISC Microprocessor User's
- >Manual) contain detailed examples of how the pipeline works. They also
- >have info on how to schedule your code (see for example section 6.6 in
- >the 604 User's manual). There is nothing obscure or tricky about it.
- >From what I can tell, it is mostly common sense once you see how the
- >pipelines work -- although I'm sure that experience helps. I also go
- >through the CW compiler output and also look in ROM to see what IBM
- >and Apple do. Would appreciate seeing more informative examples posted
- >here by the experts (e.g. last year Tim Olson at Apple Computer/Somerset
- >posted several interesting code examples).
-
- >There are some differences between the 601 and 604 but they don't seem
- >to be a major matter. What I have done is concentrate on the 604 (there
- >are none of the old POWER ops to tempt one, e.g. when a 64 bit divide is
- >needed). And the manual is more readable. In fact the 604 (on paper) looks
- >like a really great chip -- with its 3 integer pipelines, etc.
- >
- >But at present don't have a 604 to program ! Am waiting patiently. Believe
- >that one facility it has, that the 601 doesn't, is a "nanosecond" timer
- >(used via the mftb op). Am I correct about this ? If so, this could help
- >with checking how well ones code is doing. Does anyone know about this ?
- >I found the manuals rather inconclusive.
-
- >Nick Burgoyne <sbrb@cats.ucsc.edu> 17 May 1995
-
- Where can one find this book on 604 assembly? What assembler do they
- recommend. Just a standard CC on AIX or what? Which brings me to my
- next question. Who is shipping a 604, and what is it running? NT won't
- be running on it until early to mid July. What about AIX?
-
- -thanks
-
- - -------------------------------------------------------------------------------
-
- Edmond Underwood
- Systems Management Group
- Computing & Network Services (University of Colorado)
- E-mail: underwoe@Colorado.Edu
-
-
-
- +++++++++++++++++++++++++++
-
- >From jmunkki@gamma.hut.fi (Juri Munkki)
- Date: 20 May 1995 11:07:10 GMT
- Organization: Helsinki University of Technology
-
- In article <3pbqcp$74o@news.primenet.com> english@primenet.com (Lawson English) writes:
- >sandor (sbrb@cats.ucsc.edu) wrote:
- >
- >: > I don't understand what the taboo is on doing PPC assembly. Assembly code
- >: > is assembly code in my book (aside from the obvious differences).
- >
- >: Agreed ! In fact PPC assembly was a lot easier to learn and use
- >: that 68K (let alone x86). It is a bit strange at first because of
- >: being a load store architecture. But once over that it goes smoothly.
- >
- >
- >How are you at scheduling so that the pipelines remain full? What about
- >604 vs 601 optimization?
-
- I don't see any reason why PPC assemblers couldn't be made smart about
- this and allowed to optimize the code by reordering instructions whenever
- possible. It would also be neat to have an interactive tool that would
- show instruction timings and pipelines states as you edit the assembly
- source code.
-
- --
- Juri Munkki jmunkki@hut.fi There ain't no such thing as a shareware lunch.
- http://www.hut.fi/~jmunkki Windsurfing: Faster than the wind.
-
- +++++++++++++++++++++++++++
-
- >From jmunkki@gamma.hut.fi (Juri Munkki)
- Date: 20 May 1995 11:10:35 GMT
- Organization: Helsinki University of Technology
-
- In article <3pbsga$oq7@news.nd.edu> dmatiske@degas.helios.nd.edu (david matiskella) writes:
- >68040 code. It's not some new problem. Personally I would
- >optimize for the 601 since A) you can buy a system that uses
- >it, B) it's most likely going to be the slowest of the 3.
-
- My experience tells me that the 5200LC is the slowest PowerMac. It
- has a 75Mhz 603. The problem seems to be that it has a narrow data
- bus.
-
- --
- Juri Munkki jmunkki@hut.fi There ain't no such thing as a shareware lunch.
- http://www.hut.fi/~jmunkki Windsurfing: Faster than the wind.
-
- +++++++++++++++++++++++++++
-
- >From allender@prairienet.org (Mark W. Allender)
- Date: 20 May 1995 13:02:32 GMT
- Organization: Prairienet, the East-Central Illinois Free-Net
-
- Robert Cassidy (rmcassid@uci.edu) wrote:
- : > (if you choose your battles carefully).
- : *That's* why the warning is there.
-
- That warning should be there for any optimization of asm. Not just PPC.
-
- --
- -Mark Allender
- -Parallax Software
- -allender@prairienet.org
-
- +++++++++++++++++++++++++++
-
- >From kbrown@vzzt.demon.co.uk (Kieran L. Brown)
- Date: 20 May 1995 16:16:14 +0100
- Organization: KGS
-
- In message <3pkigu$hae@nukkekoti.cs.hut.fi> Juri Munkki wrote:
-
- > In article <3pbqcp$74o@news.primenet.com> english@primenet.com (Lawson English) writes:
- > >sandor (sbrb@cats.ucsc.edu) wrote:
- > >
- > >: > I don't understand what the taboo is on doing PPC assembly. Assembly code
- > >: > is assembly code in my book (aside from the obvious differences).
- > >
- > >: Agreed ! In fact PPC assembly was a lot easier to learn and use
- > >: that 68K (let alone x86).
-
- Of course it is! It is RISC, after all!
-
- If you really want a good processor, take a look at the new generation of ARM
- processors. They range from cheap and fast to less cheap and blindingly fast.
- They kick the PowerPC into a cocked hat!
-
- --
- Kieran L. Brown
- KGS Solutions Limited
- ... 'Bother', said Pooh, glowing in the dark.
-
- +++++++++++++++++++++++++++
-
- >From jmunkki@gamma.hut.fi (Juri Munkki)
- Date: 20 May 1995 21:46:41 GMT
- Organization: Helsinki University of Technology
-
- In article <rmcassid-1805951653330001@dante.eng.uci.edu> rmcassid@uci.edu (Robert Cassidy) writes:
- >I don't think that PPC assembly it totally taboo - just that there are
- >strong warnings in place that it is a lot harder to improve over the
- >compiler. There are lots of hard-core assembly programmers that swear up
- >and down that assembly is the *only* way to go - C is for wusses. These
- >people, for a large project, will probably not gain significantly (if at
- >all) over the programmer that starts in C and optimizes little areas in
- >assembly. They might have gotten away with it on an 040 or 486, but I
- >think a PPC would break them.
-
- This is exactly the reason why PPCAsm is a bad idea and inline assembly
- for MWC or Symantec C is a good idea. If you are forced to work with a
- separate assembly tool, you are more likely to write assembly code than
- you would if you started out with a C program.
-
- I'm usually pretty good at detecting the critical parts of a program
- (those few % that execute all the time) and sometimes code these parts
- directly in assembly language, if the problem is easier to express in
- assembly language. My normal way of working is to prototype in C, then
- decide which way is easier (asm or C) and implement one.
-
- I prefer the true inline approach to the asm function approach (Think C
- vs. MWC) because the truely inlined approach allows you to set up
- variables with C and then use asm only for the critical part of that
- function whereas in an asm function you either have to set up everything
- with asm or you have to define a calling C function that does the
- setting up.
-
-
- Everyone knows that underlined text is bad and should never be used for
- anything and that it was only invented because typewriters couldn't
- easily type italic or boldface. Yet word processsors all allow you to
- use underlined text. I wish compiler writers would listen to the users
- and allow inline assembly even though they know that is not officially
- a good idea to use assembly language.
-
- --
- Juri Munkki jmunkki@hut.fi There ain't no such thing as a shareware lunch.
- http://www.hut.fi/~jmunkki Windsurfing: Faster than the wind.
-
- +++++++++++++++++++++++++++
-
- >From maynard@elwing.otago.ac.nz (Maynard James Handley)
- Date: 21 May 1995 09:17:20 GMT
- Organization: University of Otago, Dunedin, NZ
-
-
- > : : : off. And there's the MPW assembler from Apple--ick.
-
- > : : Ick indeed.
-
- > : Not to sound naive (it is possible), but what is wrong with that assembler?
- > : It works fine for me.
-
- > Indeed it does. HOwever, it is really difficult to learn to use, IMHO,
- > and 1) requires that you have MPW and 2) that you know how to use MPW.
-
- > The documentation is "spotty" shall we say?
-
- It is certainly true that the PPCAsm documentation sucks. I have no idea
- how anyone is supposed to produce their first code without an example to
- guide them.
- However it is NOT true that PPAsm requires MPW. SC++ 8 (and anything else
- that uses Toolserver) can make use of PPCAsm.
- I hav patched together an AppleScript plus a Toolserver script that
- compiles my C/C++ in the Symantec environment, and the assembly and linking
- under Toolserver. Works like a charm.
- (And might I say, shows just how cool AppleScript is. The scripts were
- put together using recording, and do all sortsa extra stuff like
- shuffle files around and auto launch apps.)
-
- I'd recommend anyone interested in PPC assembly and with the SC++8 CD to
- look at PPCAsm and Toolserver.
-
- I'm afraid I don't know about MW. Can they use Toolserver and produce
- xcoff objects so they can be linked by PPCLink?
-
- Maynard Handley
-
- +++++++++++++++++++++++++++
-
- >From maynard@elwing.otago.ac.nz (Maynard James Handley)
- Date: 21 May 1995 09:34:18 GMT
- Organization: University of Otago, Dunedin, NZ
-
- Hi,
- Enough about whether or not to code in PPC assembly.
- a) It's not amazingly hard---common sense and understanding how the chip
- works will tell you most all you need to know about keeping the pipelines
- busy.
- b) Have the people on the side of the compilers actually LOOKED at
- compiler output? I've only looked at SC and MW, not xlc and the new Motorola
- compilers which may be much better. But SC and MW are way suboptimal.
- Common reasons for this are
- * Compiling is tough. The code goes through a bunch of abstractions
- and data is lost on the way to the code generator. You in assembly know
- that lost info.
- * Sometimes in C you can't specify what you want done exactly---like
- load in a value from somewhere as a double then do a bunch of single
- precision ops on it, then write it as a double. The compiler will
- insert various steps along the way that do roundings and such you
- probably don't need. The same thing if you do a lot of work mixing
- signed and unsigned values.
- * There are some very cools PPC features you simply accnot access from
- C. Examples are
- # Clearing an array to zero by using the cache block clearing operations.
- # Touching cache data a few operations before you need it so as
- to preload it.
- # Those funky shift and exatract with mask operations for bit-field
- extraction.
- * There are common-sense optimizations for speeding up code like
- software-pipelining to interleave loads/stores for the next/previous
- set of data while doing arithmetic on the current set. The compilers should
- be capable of this sort of thing, like loop-unrolling, but doesn't seem
- to be.
-
- Having said that, a change of pace and a real question, not faffing around.
-
- I am trying to get to grips with the nitty-gritty of PPC 601 timings and
- have come across something that does not make sense to me. I'd appreciate
- any comments people have.
- Essentiallu what I am trying to figure out is why a floating
- point store, fpsb, seems to block a subsequent integer store by two clocks.
- Consider the code
-
- stfd fp0, 0(r3)
- lwz r4, 0(r5)
- addi r0, r0, 0
- addi r0, r0, 0
- addi r0, r0, 0
- (Example 1)
- addi r0, r0, 0
- addi r0, r0, 0
- addi r0, r0, 0
- addi r0, r0, 0
-
- blr
- END
-
- This executes in exactly the time one would expect, one clock per
- instruction with the blr basically free. The long string of addis
- before the blr is to make sure we have CARB/CACC free enough
- in advance for the blr. This simplifies the problem so we don't have
- to deal with two issues at once.
- (If you don't appreciate the point of that, you're probably not going to be
- able to answer the question.)
- In the same vein, everything is set up not to cross double-word boundaries.
-
- Now suppose we change this code to
-
- stfd fp0, 0(r3)
- stw r4, 0(r5)
- addi r0, r0, 0
- addi r0, r0, 0
- addi r0, r0, 0
- (Example 2)
- addi r0, r0, 0
- addi r0, r0, 0
- addi r0, r0, 0
- addi r0, r0, 0
-
- blr
- END
-
- Now the code will take two cycles longe. But the two extra cycles are stalls
- behind the stfd. We can see this if we change the code to
-
- stfd fp0, 0(r3)
- addi r0, r0, 0
- addi r0, r0, 0
- stw r4, 0(r5)
- addi r0, r0, 0
- (Example 3)
- addi r0, r0, 0
- addi r0, r0, 0
- addi r0, r0, 0
- addi r0, r0, 0
-
- blr
- END
- This code executes in the same amount of time as the first snippet of code.
-
- Now reading the 601 manual, chapter 7 closely, it's not at all clear why
- this should happen. What do we know?
- The fp store will pass through ID, IE and IC all in one cycle. This
- is confirmed by the fact that in example (1) there are no stalls.
- the fp store WILL block for three clocks in FPSB while the data is hauled
- through the fp pipeline but that should not affect anyone. Additionally
- it is only after these three clocks that CARB and CACC are needed,
- while (in example 2) the integer store would need them earlier thus there
- would be no structural hazard regarding those. Claerly from the code there is
- no data hazard.
-
- My hypothesis is that while the 601 manual seems to imply FPSB and ISB (pg 7-36)
- are independent, they are in fact not independent. Thus with FPSB occupied
- there is a structural hazard that prevents ISB from being available for use.
- Until FPSB is freed, any instruction that wants to access ISB is frozen.
-
- Is this in fact correct, or is there a better explanation for this fact?
-
- I came across this while playing around trying to write opmtimal code
- for setting a long array to the same (non-zero) value. This is an extremely
- interesting problem. One would like to use stfd and write 8 bytes at a time
- but that is not the full answer because stfd sits in FPSB for three clocks.
- A long sequence of stw's is not a great idea because more than four in a
- row and you starve the instruction queue (really makes you wish 601 had
- Harvard caches). My solution uses an insane mix of stfd's interleaved with
- stswi's with gaps between these to do various weird stuff. It looks
- absurd but is wicked-fast.
-
- Has anyone made code available that is known to be optimal for this sort of
- problem? If not, might I suggest that we formalize it as a contest? Writing
- this sort of code is wonderful fun and even though one reaches a point
- where saving one cycle in 200 doesn't make sense as an engineering issue,
- as a contest no work is too much to achieve optimal results.
- If enough people agree this might be fun, I can formalize the problem
- and post it.
-
- (Finally please no-one give me the lecture on stswi being bad for machines
- other than 601. I know, I know. This stuff is all shared-library based. I'll
- just rewrite the code and use a new lib for 603 and 604.)
-
- Maynard Handley
-
-
- +++++++++++++++++++++++++++
-
- >From english@primenet.com (Lawson English)
- Date: 21 May 1995 21:04:42 GMT
- Organization: Primenet Services for the Internet (602)395-1010
-
- Maynard James Handley (maynard@elwing.otago.ac.nz) wrote:
- [snipt]
- : Having said that, a change of pace and a real question, not faffing around.
-
- : I am trying to get to grips with the nitty-gritty of PPC 601 timings and
- : have come across something that does not make sense to me. I'd appreciate
- : any comments people have.
- : Essentiallu what I am trying to figure out is why a floating
- : point store, fpsb, seems to block a subsequent integer store by two clocks.
- : Consider the code
-
- You missed it. From page i-175 of the Motorola PowerPC 601 User's Manual:
-
- "For a series of fp store instructions, the maximum throughput is one fp
- store every three processor cycles. Each store holds in FWA for 2 cycles
- and this freezes the entire PFU pipeline. THerefore, one cannot schedule
- fp instructions in between the float stores to improve throughput in the
- fp unit. Becuase the float stores also take ua a position in the integer
- pipeline, there is no opportunity to schedule in integer instructions and
- improve throughput in the interger pipeline."
-
- It goes on to say that FP load/store operations are inherently slower
- than FP load/stores, if youare doing a block-move/copybits style function.
-
-
- The only exception to this, BTW, is if you are writing to non-cacheable
- memory, like the VRAM, where the latency of the memory is such that you
- have more delay from accessing memory than from freezing the pipelines
- for a few cycles.
-
- The 604 may be different in this respect (faster at fp stores, I believe).
-
- --
- - -----------------------------------------------------------------------------
- Lawson English __ __ ____ ___ ___ ____
- english@primenet.com /__)/__) / / / / /_ /\ / /_ /
- / / \ / / / / /__ / \/ /___ /
- - -----------------------------------------------------------------------------
-
- +++++++++++++++++++++++++++
-
- >From sandvik@apple.com (Kent Sandvik)
- Date: Sun, 21 May 1995 14:49:45 -0800
- Organization: Apple Computer, Inc. Developer Technical Support
-
- In article <3pi5mh$657@vixen.cso.uiuc.edu>, allender@prairienet.org (Mark
- W. Allender) wrote:
- > This argument over asm vs. C has been around for a long time. Compilers
- > for the PC generate really great code (watcom in particular). But you know
- > what, hand optimizing in asm in the most crucial spots can *always* be a
- > win. Why? Because *you* know about the structure of your program, and how
- > you can treat register allocation. You may not always get a great speedup
- > over the compiler, but in most cases, I believe that it is worth the effort
- > (if you choose your battles carefully).
-
- True. There are exceptions though, such as pipeline optimization (a must
- with most RISC architectures) that a smart linker could do, a smart person
- could also learn this after a couple of months/years, but for the average
- code cruncher it's better to stick to tools.
-
- --Kent
-
- --
- Kent Sandvik sandvik@apple.com Working with Multimedia stuff...
- Apple Developer Technical Support. Private activities on Internet.
-
- +++++++++++++++++++++++++++
-
- >From Mark Williams <Mark@streetly.demon.co.uk>
- Date: 22 May 1995 07:47:49 +0100
- Organization: Streetly Software
-
-
- In article <3pfr30$bbe@waage.rz.uni-ulm.de>, Heiner Wolf writes:
-
- >
- > > I know that you'd have to be an idiot to write lots of PPC assembly
- > > (other than for code generators) and I know that Apple recommends against
- > > it, but still: Is anyone out there writing significant portions of an
- > > app or game or whatever in PowerPC assembly? I'd love to hear what you
- > > have to say.
- >
- > We are coding the kernal of a JPEG image decompressor in assembler.
- >
- > Yes, I know. The compilers are so good and it is not neccessary. But if I can
-
- Falls down laughing. Just which compilers would those be...?
-
- Mark Williams
-
- +++++++++++++++++++++++++++
-
- >From Bruce@hoult.actrix.gen.nz (Bruce Hoult)
- Date: Mon, 22 May 1995 17:35:45 +1200 (NZDT)
- Organization: (none)
-
- maynard@elwing.otago.ac.nz (Maynard James Handley) writes:
- > I am trying to get to grips with the nitty-gritty of PPC 601 timings and
- > have come across something that does not make sense to me. I'd appreciate
- > any comments people have.
- > Essentiallu what I am trying to figure out is why a floating
- > point store, fpsb, seems to block a subsequent integer store by two clocks.
-
- The 601 manual talks about this on page I-175. Each FP store holds in FWA
- for two cycles, blocking both the FP and integer pipes. Bummer. This
- makes it faster to move operations using integer loads and stores. (if
- the memory is cachable)
-
- -- Bruce
-
- +++++++++++++++++++++++++++
-
- >From tim@ibmoto.com (Tim Olson)
- Date: 20 May 1995 09:50:23 -0500
- Organization: Apple/IBM/Motorola Somerset Design Center, Austin, TX
-
- In article <3pbsga$oq7@news.nd.edu>,
- david matiskella <dmatiske@degas.helios.nd.edu> wrote:
- >I assume he doing it by hand. For 601/603/604 optimization you
- >have to either pick one or pick the code which gives acceptable
- >performance on all three. Nothing new. Optimum pentium code isn't
- >optimum 486 code. Similiar Optium 68K is not the same as otptium
- >68040 code. It's not some new problem. Personally I would
- >optimize for the 601 since A) you can buy a system that uses
- >it, B) it's most likely going to be the slowest of the 3.
-
- Actually, it is better to schedule code with the most parallel
- microarchitecture in mind. Since the 601 has a single, combined
- integer/load/store unit, it really doesn't matter what order instructions
- are fed through it, as long as the code is scheduled around true
- dependencies (mainly loads to load-uses).
-
- However, a 604 can benefit from having parallelism exposed.
-
-
- --
- Tim Olson
- Apple Computer / Somerset
- (tim@apple.com)
-
- +++++++++++++++++++++++++++
-
- >From tim@ibmoto.com (Tim Olson)
- Date: 20 May 1995 09:57:29 -0500
- Organization: Apple/IBM/Motorola Somerset Design Center, Austin, TX
-
- In article <sbrb-1705950803270001@sandor23.slip.crl.com>,
- sandor <sbrb@cats.ucsc.edu> wrote:
- >But at present don't have a 604 to program ! Am waiting patiently. Believe
- >that one facility it has, that the 601 doesn't, is a "nanosecond" timer
- >(used via the mftb op). Am I correct about this ? If so, this could help
- >with checking how well ones code is doing. Does anyone know about this ?
- >I found the manuals rather inconclusive.
-
- Yes, the PowerPC architecture has a 64-bit Timebase register which is
- accessible in user-mode code. What this register counts is implementation-
- defined, but on all existing PowerPC processors (except 601, which does
- not have the Timebase register, but instead has the RTC) the Timebase
- counts multiples of bus clocks (i.e. the timebase increments every 4 bus
- clocks).
-
- The MFTB instruction returns the lower 32 bits of the timebase, while the
- MFTBU instruction returns the upper. It is left as an excercise to the
- reader to come up with a short instruction sequence that returns a
- "coherent" 64-bit pair, as the split read is not atomic...
-
- --
- Tim Olson
- Apple Computer / Somerset
- (tim@apple.com)
-
- +++++++++++++++++++++++++++
-
- >From andrewed@ee.latrobe.edu.au (Andrew Edgecombe)
- Date: 19 May 1995 14:38:29 +1000
- Organization: Department of Electronic Engineering, La Trobe University
-
- Power mac forth? Where, when , who etc.
- Someone please let me know about it!!!
-
- andrewed@ee.latrobe.edu.au
-
-
- +++++++++++++++++++++++++++
-
- >From dom@i-cubed.demon.co.uk (Dom)
- Date: Mon, 22 May 1995 12:28:50
- Organization: i-cubed ltd., Cambridge, UK
-
- In article <rmcassid-1805951653330001@dante.eng.uci.edu> rmcassid@uci.edu (Robert Cassidy) writes:
-
- >> >I don't understand what the taboo is on doing PPC assembly. Assembly code
- >> >is assembly code in my book (aside from the obvious differences).
-
-
- >> I agree quite totally. If a person wants to use assembly language, then
- >> he/she should be allowed to use it. At least MWC doesn't seem to be able
- >> to generate very fast code for the PPC... I tried contacting tonyn@tiac.net
- >> about his assembler, but he hasn't replied. I guess I could use PPCAsm,
- >> since I have access to ETO disks, but I'm not very enthusiastic about
- >> touching MPW.
-
- >I don't think that PPC assembly it totally taboo - just that there are
- >strong warnings in place that it is a lot harder to improve over the
- >compiler. There are lots of hard-core assembly programmers that swear up
- >and down that assembly is the *only* way to go - C is for wusses. These
-
- These people also get up at six, have a cold shower, run barefoot for three
- miles, before mowing the lawn with a pair of scissors. And that's a Sunday
- morning lie-in :)
-
- Anyway, I'm doing some 403GA test code, and I have to use assembler.
- Doesn't take too long to get your head around it, after which,
- it's much like anything else.
-
- --
- Dom - the look and feel of this sig is mine mine mine
-
-
- +++++++++++++++++++++++++++
-
- >From ubpliner@mcs.drexel.edu (Bradley S. Pliner)
- Date: Tue, 23 May 1995 00:12:58 -0400
- Organization: Drexel University
-
- I strongly recommend staying away from RISC-based assembly programming,
- unless it's 100% necessary, and you've eaten your weeties. You have a lot
- to worry about that is not an issue with CISC-based assembly. Foremost,
- pipelined instructions will be a real pain in the butt to work with.
-
- In article <dom.442.000C7B6A@i-cubed.demon.co.uk>, dom@i-cubed.demon.co.uk
- (Dom) wrote:
-
- > In article <rmcassid-1805951653330001@dante.eng.uci.edu>
- rmcassid@uci.edu (Robert Cassidy) writes:
- >
- > >> >I don't understand what the taboo is on doing PPC assembly. Assembly code
- > >> >is assembly code in my book (aside from the obvious differences).
- >
- >
- > >> I agree quite totally. If a person wants to use assembly language, then
- > >> he/she should be allowed to use it. At least MWC doesn't seem to be able
- > >> to generate very fast code for the PPC... I tried contacting tonyn@tiac.net
- > >> about his assembler, but he hasn't replied. I guess I could use PPCAsm,
- > >> since I have access to ETO disks, but I'm not very enthusiastic about
- > >> touching MPW.
- >
- > >I don't think that PPC assembly it totally taboo - just that there are
- > >strong warnings in place that it is a lot harder to improve over the
- > >compiler. There are lots of hard-core assembly programmers that swear up
- > >and down that assembly is the *only* way to go - C is for wusses. These
- >
- > These people also get up at six, have a cold shower, run barefoot for three
- > miles, before mowing the lawn with a pair of scissors. And that's a Sunday
- > morning lie-in :)
- >
- > Anyway, I'm doing some 403GA test code, and I have to use assembler.
- > Doesn't take too long to get your head around it, after which,
- > it's much like anything else.
- >
- > --
- > Dom - the look and feel of this sig is mine mine mine
-
- -=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=-
- Bradley S. Pliner, ubpliner@mcs.drexel.edu, (215) 355-6419 (Call 24 hr/day)
- Drexel University: Comp Sci BS (Sept '95), Software Engineering MS (June '96)
- -=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=-
-
- +++++++++++++++++++++++++++
-
- >From Bruce@hoult.actrix.gen.nz (Bruce Hoult)
- Date: Wed, 24 May 1995 13:59:21 +1200 (NZDT)
- Organization: (none)
-
- ubpliner@mcs.drexel.edu (Bradley S. Pliner) writes:
- > I strongly recommend staying away from RISC-based assembly programming,
- > unless it's 100% necessary, and you've eaten your weeties. You have a lot
- > to worry about that is not an issue with CISC-based assembly. Foremost,
- > pipelined instructions will be a real pain in the butt to work with.
-
- This seems like really strange advice. The Pentium and 68040 are also
- pipelined processors, and they are far more complex to understand and
- optomise for than the PowerPC -- so much so that most compilers and
- indeed assembly programmers don't even try, but just guess what will
- work OK.
-
- -- Bruce
-
- +++++++++++++++++++++++++++
-
- >From maynard@elwing.otago.ac.nz (Maynard James Handley)
- Date: 24 May 1995 07:47:22 GMT
- Organization: University of Otago, Dunedin, NZ
-
- Bruce Hoult (Bruce@hoult.actrix.gen.nz) wrote:
- > maynard@elwing.otago.ac.nz (Maynard James Handley) writes:
- > > I am trying to get to grips with the nitty-gritty of PPC 601 timings and
- > > have come across something that does not make sense to me. I'd appreciate
- > > any comments people have.
- > > Essentiallu what I am trying to figure out is why a floating
- > > point store, fpsb, seems to block a subsequent integer store by two clocks.
-
- > The 601 manual talks about this on page I-175. Each FP store holds in FWA
- > for two cycles, blocking both the FP and integer pipes. Bummer. This
- > makes it faster to move operations using integer loads and stores. (if
- > the memory is cachable)
-
- > -- Bruce
-
- You have misinterpreted what page I-175 means.
- You cannot have BACK-TO-BACK fp stores. The 2nd fp store will stall
- because the FPSB is in use, and because an fp store goes through the
- integer pipeline the integer pipeline freezes.
- This DOES NOT mean the integer pipeline freezes for three clocks
- whenever you use an fp store. For example if you slot loads
- or additions or such like afer the fp store they will go just fine with
- no delays---try it. it is only if you slot a second fp store (or as i
- explained in my original post, an integer store) that you block.
-
- Using fpstore/fpload as a bit-blt is not always a bad idea. If you
- canfit in only the slightest extra work between the stores you come
- out ahead.
-
- Maynard
-
-
- +++++++++++++++++++++++++++
-
- >From allender@prairienet.org (Mark W. Allender)
- Date: 24 May 1995 16:01:55 GMT
- Organization: Prairienet, the East-Central Illinois Free-Net
-
- Bruce Hoult (Bruce@hoult.actrix.gen.nz) wrote:
- : ubpliner@mcs.drexel.edu (Bradley S. Pliner) writes:
- : > I strongly recommend staying away from RISC-based assembly programming,
- : > unless it's 100% necessary, and you've eaten your weeties. You have a lot
-
- : This seems like really strange advice. The Pentium and 68040 are also
- : pipelined processors, and they are far more complex to understand and
-
- BINGO!!!
-
- --
- -Mark Allender
- -Parallax Software
- -allender@prairienet.org
-
- +++++++++++++++++++++++++++
-
- >From Bruce@hoult.actrix.gen.nz (Bruce Hoult)
- Date: Thu, 25 May 1995 15:39:22 +1200 (NZDT)
- Organization: (none)
-
- maynard@elwing.otago.ac.nz (Maynard James Handley) writes:
- > You have misinterpreted what page I-175 means.
- > You cannot have BACK-TO-BACK fp stores. The 2nd fp store will stall
- > because the FPSB is in use, and because an fp store goes through the
- > integer pipeline the integer pipeline freezes.
- >
- > This DOES NOT mean the integer pipeline freezes for three clocks
- > whenever you use an fp store. For example if you slot loads
- > or additions or such like afer the fp store they will go just fine with
- > no delays---try it. it is only if you slot a second fp store (or as i
- > explained in my original post, an integer store) that you block.
-
- So you're saying that a single FP store doesn't freeze the integer pipe
- at all -- it's the second FP store that causes the integer line to stall
- in sympathy with the FP line?
-
- A small point about "slot loads or additions or such like afer the fp
- store": have you allowed for the FP store (or any FP instruction)
- being dispatched from high in the instruction queue, while the integer
- instructions dispatch only from the bottom slot?
-
- -- Bruce
-
- ---------------------------
-
- >From timmyd@netcom.com (Tim DeBenedictis)
- Subject: Can one do custom controls w-o CDEFs?
- Date: Tue, 23 May 1995 00:42:17 GMT
- Organization: NETCOM On-line Communication Services (408 261-4700 guest)
-
- I was wondering: is it possible to develop a custom control WIHOUT using
- a CDEF?
-
- Here's my thoughts on how you'd do it:
-
- 1) Write your own control definition procedure.
- 2) Create a new control via a standard NewControl() call.
- 3) Replace the pointer to the control definition procedure inside the
- control record returned in step 2) with a pointer to my own definition
- procedure (step 1) or an equivalent UPP (on the PowerPC).
-
- I haven't tried this at all, yet, but I'm wondering if this is a
- hopelessly flawed approach to begin with.
-
- Is there any recommended way of doing a picture-button? (By this, I mean
- a simple push-button which displays a picture instead of text, and
- displays a different picture when pressed.) I want to have the
- capability of doing something like a toolbar. (Is there any reccomended
- way of doing a toolbar, for that matter? I hate the things, but it seems
- to me that there is no real way around them.)
-
- I'd also like to make a control which contains a TERec, and does what a
- TERec would do when clicked, etc. Is there any quick-n-dirty way to do
- this? Is sample code available anywhere?
-
- Thanks in advance,
-
- -Tim DeBenedictis
-
-
- +++++++++++++++++++++++++++
-
- >From graham@impro.demon.co.uk (Graham)
- Date: 23 May 1995 12:02:29 +0100
- Organization: Demon Internet
-
- Yes you can. The technique you suggest is ALMOST correct. However, the
- defproc "pointer" needs to be a handle, so you need to create a handle
- to a routine descriptor, and put that handle in the defproc field. The
- code can be embedded in your app code, and of course can be easily
- debugged there. I use this technique extensively- MDEF's, CDEFs, LDEFs
- all work. If you are not using UPPs, then you need to create a dummy
- jump instruction in the handle which jumps to your code. If you need
- the code, eMail me.
-
- regards, Graham.
-
- PS. I don't knoe of a "standard" method for picture buttons, but the
- CDEf can do naything it needs to, like load pictures, etc. So most
- techniques work.
-
- +++++++++++++++++++++++++++
-
- >From uminger@mcs.drexel.edu (Lord of the Sith)
- Date: Tue, 23 May 95 18:04:57 GMT
- Organization: Drexel University, Dept. of Math. and Comp. Sci.
-
- Tim DeBenedictis (timmyd@netcom.com) wrote:
-
- : I'd also like to make a control which contains a TERec, and does what a
- : TERec would do when clicked, etc. Is there any quick-n-dirty way to do
- : this? Is sample code available anywhere?
-
- Well, TextEdit, despite the claims made in inside macintosh is anything but
- easy. But, it's by far the easiest way on the mac. There is no quick and
- dirty way.
-
- For source code, follow this url and look around:
-
- http://www.info.apple.com/dev/developerservices.html
-
- somewhere, theres a file with the words TESample in it. That's it.
- If you follow the links developer stuff, and then source code, yuou'll
- find it.
-
- : Thanks in advance,
-
- : -Tim DeBenedictis
-
-
- --
- Matt Inger
- uminger@mcs.drexel.edu
- http://mcs.drexel.edu/~uminger/
- "Remember when you were young? You shone like the sun."
-
- +++++++++++++++++++++++++++
-
- >From jordanz@altura.com (Jordan Zimmerman)
- Date: Wed, 24 May 1995 11:19:32 -0800
- Organization: Altura Software, Inc.
-
- > 1) Write your own control definition procedure.
- > 2) Create a new control via a standard NewControl() call.
- > 3) Replace the pointer to the control definition procedure inside the
- > control record returned in step 2) with a pointer to my own definition
- > procedure (step 1) or an equivalent UPP (on the PowerPC).
-
- There isn't a "pointer" to a CDEF in the control_h. It's a Handle to a
- CDEF resource. This creates a major problem for what you want to do. The
- only real way to do this is to use the "6 Byte CDEF trick". You create a
- CDEF that is 6 bytes long and contains the following data "0x4EF9 0000
- 0000". At runtime, you fill the zeroes with a pointer to your CDEF in
- your app (make sure to flush the caches).
-
- However, this is all just a big kludge. Is there such a great benefit to
- using the Control Manager at all? The code to track a mouse click fits
- into a small function and the CDEF does the rest anyways. Why not skip
- the Control Manager altogether.
-
- --
- Jordan Zimmerman, Altura Software
- home page: http://www.altura.com/jordanz/home.html
- Who is John Galt?
-
- ---------------------------
-
- >From Stuart A. Malone <samalone@mit.edu>
- Subject: Extracting data from AEDescs
- Date: 24 May 1995 14:13:05 GMT
- Organization: Massachusetts Institute of Technology
-
- What is the best way of extracting primitive data (like a DescType) from
- an AEDesc? Several of the other types in OSA have routines that will
- extract some portion of the data to a pointer in a particular format:
-
- AppleEvent: AEGetParamPtr
- AERecord: AEGetKeyPtr
- AEDescList: AEGetNthPtr
-
- However, there does not seem to be any corresponding routine when using a
- raw AEDesc. This comes up, for example, when writing object accessor
- functions, where the keyForm argument is passed in as an AEDesc.
-
- The best I've been able to come up with is:
-
- DescType ExtractDescType(const AEDesc * originalDesc)
- {
- AEDesc tempDesc;
- DescType result;
-
- OSErr err = AECoerceDesc(originalDesc, typeType, &tempDesc);
- if (err != noErr) throw err;
-
- result = **((DescType **)tempDesc.dataHandle);
- AEDisposeDesc(&tempDesc);
-
- return result;
- }
-
- But it bothers me that I have to extract the data using brute-force
- coercion, especially since Apple was saying at WWDC '95 that Copland is
- going to move to a pointer-based implementation of AppleScript. Does
- anybody have a better way to accomplish this?
-
- --Stuart A. Malone
- MIT Lab for Advanced Technology in the Humanities
-
- +++++++++++++++++++++++++++
-
- >From BrianS@pbcomputing.com (Brian Stern)
- Date: Wed, 24 May 1995 11:31:43 -0500
- Organization: The University of Texas at Austin, Austin, Texas
-
- In article <3pveti$hmu@senator-bedfellow.MIT.EDU>, Stuart A. Malone
- <samalone@mit.edu> wrote:
-
- < What is the best way of extracting primitive data (like a DescType) from
- < an AEDesc? Several of the other types in OSA have routines that will
- < extract some portion of the data to a pointer in a particular format:
- <
- < AppleEvent: AEGetParamPtr
- < AERecord: AEGetKeyPtr
- < AEDescList: AEGetNthPtr
- <
- < However, there does not seem to be any corresponding routine when using a
- < raw AEDesc. This comes up, for example, when writing object accessor
- < functions, where the keyForm argument is passed in as an AEDesc.
- <
- < The best I've been able to come up with is:
- <
- < DescType ExtractDescType(const AEDesc * originalDesc)
- < {
- < AEDesc tempDesc;
- < DescType result;
- <
- < OSErr err = AECoerceDesc(originalDesc, typeType, &tempDesc);
- < if (err != noErr) throw err;
- <
- < result = **((DescType **)tempDesc.dataHandle);
- < AEDisposeDesc(&tempDesc);
- <
- < return result;
- < }
- <
- < But it bothers me that I have to extract the data using brute-force
- < coercion, especially since Apple was saying at WWDC '95 that Copland is
- < going to move to a pointer-based implementation of AppleScript. Does
- < anybody have a better way to accomplish this?
-
- Maybe I'm missing something but an AEDesc is a struct consisting of two
- fields. The first is the DescType and you can read it directly. The
- second is the dataHandle and its contents are private to the AppleEvent
- Manager (although they're obvious in most cases).
-
- Accessing the DescType is simply a matter of looking at it:
-
- result = tempDesc.descriptorType;
-
- Calling AEDisposeDesc does set the descriptorType to typeNull.
-
- <
- < --Stuart A. Malone
- < MIT Lab for Advanced Technology in the Humanities
-
- ____________________________________________________________________
- Brian Stern {:-{)} BrianS@pbcomputing.com
- Toolbox commando and Menu bard. Will FlushCache for Cash
-
- +++++++++++++++++++++++++++
-
- >From Stuart A. Malone <samalone@mit.edu>
- Date: 24 May 1995 18:04:20 GMT
- Organization: Massachusetts Institute of Technology
-
- Thanks for the response, Brian.
-
- Perhaps I confused matters in my example by using the type DescType,
- which is also the type of the descriptorType slot of the AEDesc. Please
- understand that my question is not about extracting the _type_ of the
- AEDesc, but the _value_ of the AEDesc. It just so happens that in the
- example I provided, the value _is_ of type DescType.
-
- Let me choose a second example, which might be less confusing. Suppose
- that I have an AEDesc that I wish to convert to a long. I look at the
- descriptorType, and see that it is indeed typeLongInteger. Great!
-
- How do I extract the long from the AEDesc without doing nasty coercions
- on the dataHandle, which as Brian says, is "private to the AppleEvent
- Manager"?
-
- --Stuart A. Malone
- MIT Lab for Advanced Technology in the Humanities
-
- +++++++++++++++++++++++++++
-
- >From ldo@waikato.ac.nz (Lawrence D9Oliveiro)
- Date: Fri, 26 May 1995 14:04:19 +1200
- Organization: University of Waikato
-
- In article <3pveti$hmu@senator-bedfellow.MIT.EDU>, Stuart A. Malone
- <samalone@mit.edu> wrote:
-
- >What is the best way of extracting primitive data (like a DescType) from
- >an AEDesc?
-
- Just copy it straight out.
-
- >The best I've been able to come up with is:
- >
- > DescType ExtractDescType(const AEDesc * originalDesc)
- > {
- > AEDesc tempDesc;
- > DescType result;
- >
- > OSErr err = AECoerceDesc(originalDesc, typeType, &tempDesc);
- > if (err != noErr) throw err;
- >
- > result = **((DescType **)tempDesc.dataHandle);
- > AEDisposeDesc(&tempDesc);
- >
- > return result;
- > }
-
- This looks OK. In Modula-2, I use the following utility routines:
-
- PROCEDURE CoerceToPtr
- (
- VAR TheDesc : AEDesc;
- ToType : DescType;
- ToData : ADDRESS;
- ToDataSize : Size;
- VAR Err : OSErr
- );
- (* coerces the data in the descriptor to the specified
- type and returns it at the specified location. *)
-
- VAR
- ResultDesc : AEDesc;
-
- BEGIN
- IF TheDesc.descriptorType = ToType THEN
- (* just copy the data straight out *)
- BlockMoveData(TheDesc.dataHandle^, ToData, ToDataSize);
- Err := noErr
- ELSE
- InitAEDesc(ResultDesc);
- Err := AECoerceDesc
- (
- (*@theAEDesc :=*) TheDesc,
- (*toType :=*) ToType,
- (*@result :=*) ResultDesc
- );
- IF Err = noErr THEN
- BlockMoveData(ResultDesc.dataHandle^, ToData, ToDataSize)
- END (*IF*);
- DisposeAEDesc(ResultDesc)
- END (*IF*)
- END CoerceToPtr;
-
- PROCEDURE CoerceToBlock
- (
- VAR TheDesc : AEDesc;
- ToType : DescType;
- VAR ToData : ARRAY OF BYTE;
- VAR Err : OSErr
- );
- (* coerces the data in the descriptor to the specified
- type and returns it at the specified location. *)
-
- BEGIN
- CoerceToPtr
- (
- (*@TheDesc :=*) TheDesc,
- (*ToType :=*) ToType,
- (*ToData :=*) ADR(ToData),
- (*ToDataSize :=*) SIZE(ToData),
- (*@Err :=*) Err
- )
- END CoerceToBlock;
-
- The latter one is particularly convenient, since the compiler
- automatically passes the size of the object for me. You could simulate
- this in C with a macro.
-
- >But it bothers me that I have to extract the data using brute-force
- >coercion, especially since Apple was saying at WWDC '95 that Copland is
- >going to move to a pointer-based implementation of AppleScript.
-
- It doesn't matter what they say. They can't break the existing API, can they?
-
- +++++++++++++++++++++++++++
-
- >From jwbaxter@olympus.net (John W. Baxter)
- Date: Wed, 24 May 1995 14:13:38 -0700
- Organization: Internet for the Olympic Peninsula
-
- In article <3pveti$hmu@senator-bedfellow.MIT.EDU>, Stuart A. Malone
- <samalone@mit.edu> wrote:
-
- > What is the best way of extracting primitive data (like a DescType) from
- > an AEDesc? Several of the other types in OSA have routines that will
- > extract some portion of the data to a pointer in a particular format:
- >
- > AppleEvent: AEGetParamPtr
- > AERecord: AEGetKeyPtr
- > AEDescList: AEGetNthPtr
- >
- > However, there does not seem to be any corresponding routine when using a
- > raw AEDesc. This comes up, for example, when writing object accessor
- > functions, where the keyForm argument is passed in as an AEDesc.
- >
- > The best I've been able to come up with is:
- >
- > DescType ExtractDescType(const AEDesc * originalDesc)
- > {
- > AEDesc tempDesc;
- > DescType result;
- >
- > OSErr err = AECoerceDesc(originalDesc, typeType, &tempDesc);
- > if (err != noErr) throw err;
- >
- > result = **((DescType **)tempDesc.dataHandle);
- > AEDisposeDesc(&tempDesc);
- >
- > return result;
- > }
-
- For a variety of reasons, if you can use the AE...Ptr () series, rather
- than the AE...Desc () series of calls, you're better off. In the case of
- typeType, you can (unless you are allowing for a list of typeTypes...there
- you ask for a list (using AEGetParamDesc(), and then ask for each one by
- pointer). Just ask for the value more directly using AEGetParamPtr ()
- rather than AEGetParamDesc (). You can include the coercion directly in
- the AEGetParamPtr ().
-
- The AE...Ptr () series is better because it saves some Memory Manager
- activity (one NewHandle/DisposeHandle pair) and because you don't have a
- descriptor you can forget to dispose.
-
- > But it bothers me that I have to extract the data using brute-force
- > coercion, especially since Apple was saying at WWDC '95 that Copland is
- > going to move to a pointer-based implementation of AppleScript. Does
- > anybody have a better way to accomplish this?
-
- The AE...Ptr () series should also help insulate you from whatever changes
- are made at Copland time.
-
- If you remember that an AppleEvent isn't really a collection of
- descriptors for attributes and parameters, but just one flattened mass,
- that can make it easier to use the ...Ptr series. [Same is <currently>
- true for lists and records...AppleEvent is basically two AERecords laid
- end to end (attributes, then parameters). With some up-front boilerplate,
- including offsets to the attribute record and the parameter record.]
-
- Reading the AEGizmoes code from Jens Alfke may help....on the other hand,
- it may cause terminal confusion. [It's good code; the subject matter is
- confusing.]
-
- - -------
- Unfortunately, one case which forces AEDesc () usage for the output is
- explicit coercion calls. Other forced AEDesc uses are in the Object Model
- library area.
-
- --
- John Baxter Port Ludlow, WA, USA [West shore, Puget Sound]
- I don't do windows.
- jwbaxter@pt.olympus.net
-
- ---------------------------
-
- >From pauls101@aol.com (PaulS101)
- Subject: Getting rid of Option-
- Date: 19 May 1995 23:49:40 -0400
- Organization: America Online, Inc. (1-800-827-6364)
-
- This may sound like a simple question, but it has me beat!
- Is there any simple way to convert an option-key combo to the plain
- key? (or from the keyboard location code to the char.)
- I'm presently using a table lookup and it stinks (I want to eventually
- support customable menus.) I can't just use Mercutio because I don't have
- the time to build it into PowerPlant just now.
- It seems like KeyTrans() should do this somehow, but I can't seem to
- figure it out and I don't have the time to do exhaustive experimenting.
- Has anyone else solved this?
-
- Thanks all,
- Paul
-
- +++++++++++++++++++++++++++
-
- >From grobbins@znet.com (Grobbins)
- Date: Mon, 22 May 1995 22:06:01 -0700
- Organization: Skunkworks
-
- In article <3pjosk$2g9@newsbf02.news.aol.com>, pauls101@aol.com (PaulS101)
- wrote:
- > Is there any simple way to convert an option-key combo to the plain
- >key? (or from the keyboard location code to the char.)
-
- If you have the virtual keyCode and modifiers from the EventRecord, just
- munge the modifiers and pass them to KeyTrans. That would look something
- like this, where state is initially zero:
-
- kchrNum = GetScript(GetEnvirons(smKeyScript), smScriptKeys)
- kchrResHandle = RGetResource('KCHR', kchrNum);
- if (kchrResHandle != nil) {
- modifiedKeyCode =
- ((keyCode & 0x007F) | (alteredModifiers & 0xFF80));
- theChar = KeyTrans(*kchrResHandle, modifiedKeyCode, &state);
- }
-
-
- Grobbins grobbins@znet.com
-
- ---------------------------
-
- >From lehmann@bert.cs.byu.edu (Ralf Lehmann)
- Subject: How to disable Text Item ?
- Date: 25 May 1995 21:02:44 GMT
- Organization: Brigham Young University
-
- How does one disable a text item in a Dialog ? I tried
- GetDItem and SetDItem, modifying the 8th bit in the
- iType field, but I still get the blinking caret in the
- field and I'm still able to enter chars (with only a
- minor behavior difference in ModalDialog: it returns
- only once I hit another item).
- Any help welcome.
-
- Ralf.
-
- +++++++++++++++++++++++++++
-
- >From mpatrick@direct.ca (Mel Patrick)
- Date: Thu, 25 May 1995 16:14:05 -0700
- Organization: Internet Direct, Inc.
-
- In article <lehmann-2505951506050001@iago.cs.byu.edu>,
- lehmann@bert.cs.byu.edu (Ralf Lehmann) wrote:
-
- > How does one disable a text item in a Dialog ? I tried
- > GetDItem and SetDItem, modifying the 8th bit in the
- > iType field, but I still get the blinking caret in the
- > field and I'm still able to enter chars (with only a
- > minor behavior difference in ModalDialog: it returns
- > only once I hit another item).
- > Any help welcome.
- >
- > Ralf.
-
- Look for a toolbox routine called HIDEDITEM(DLOGPtr,theItem). Basically it
- moves the dialog item off screen and kills the textedit update from
- happening to the field. Of course this answer assumes that you want the
- item not to be visible. Which incidently your message didn't say (a point
- in future might be to explain what results you want)...
-
- If all you want to do is deactivate the edit field itself, look for the
- toolbox routine called, "TEDeactivate(hTe)". Use the GETDITEM to get a
- handle to edit field, and then the tedeactivate to stop the caret from
- doing its thing.
-
- --
- Mel Patrick
- mpatrick@direct.ca
-
- +++++++++++++++++++++++++++
-
- >From davep@leonardo.lmt.com (Dave Polaschek)
- Date: Fri, 26 May 1995 06:51:17 -0500
- Organization: LaserMaster
-
- In article <lehmann-2505951506050001@iago.cs.byu.edu>,
- lehmann@bert.cs.byu.edu (Ralf Lehmann) wrote:
-
- > How does one disable a text item in a Dialog ? I tried
- > GetDItem and SetDItem, modifying the 8th bit in the
- > iType field, but I still get the blinking caret in the
- > field and I'm still able to enter chars (with only a
- > minor behavior difference in ModalDialog: it returns
- > only once I hit another item).
- > Any help welcome.
- >
- > Ralf.
-
- The way I handle it is to 1) TESetSelect() the selection to nothing,
- 2) TEDeactivate the current editText item (if the item I'm disabling is
- the current one), 3) Select the next editText item's text, 4) change the
- type of the item from editText to statText, 5) get the rectangle that
- covers the item and the frame (InsetRect(&itemRect,-4,-4)) and 6)
- EraseRect() and InvalRect() that rectangle so the item is forced to
- redraw.
-
- This avoid the problem of still having TextEdit think the cursor's
- still in an item I've turned off. If you don't have another editText
- item to select, things get trickier. You'll need to do the TESetSelect
- and TEDeactivate, though.
-
- -DaveP
- --
- Dave Polaschek -- work:davep@county.lmt.com -- home:davep@eworld.com
- Vending machines SHOULD respond to a [finger] request with a list of
- all items currently available for purchase... -RFC1288
-
- +++++++++++++++++++++++++++
-
- >From sped@lfso.ifa.hawaii.edu (Byron Han)
- Date: Fri, 26 May 1995 20:14:44 GMT
- Organization: Institute for Astronomy, Hawaii
-
- In article <lehmann-2505951506050001@iago.cs.byu.edu> lehmann@bert.cs.byu.edu (Ralf Lehmann) writes:
- >How does one disable a text item in a Dialog ? I tried
- >GetDItem and SetDItem, modifying the 8th bit in the
- >iType field, but I still get the blinking caret in the
- >field and I'm still able to enter chars (with only a
- >minor behavior difference in ModalDialog: it returns
- >only once I hit another item).
- >Any help welcome.
-
- Call HideDItem, GetDItem, SetDItem, ShowDItem
-
- The SetDItem is used to change the item type from editText to statText.
- The Hide/Show are required to have the dialog manager take care of
- deactivating the text edit item.
-
-
- --
- Byron Han, Graduate Student University of Hawai`i at Mano`a
- Institute for Astronomy Email: sped@ifa.hawaii.edu
- Quote: "Given current global population growth rates, reproduction
- will soon no longer be a right but a priviledge."
-
- ---------------------------
-
- >From quinlan@kits.sfu.ca (Brian Quinlan)
- Subject: To OOP or not to OOP. That...
- Date: 10 May 95 07:25:44 GMT
- Organization: Simon Fraser University
-
- I'm writing a medium sized program right now using a combination of object
- oriented and procedural code. For example, I use objects for my windows and
- most of my data structures but not my event loop. I can't seem to decide
- whether to use object oriented techniques on code that, if it was object
- oriented, could have only one instance. For example, why would I make my
- preferences code into an object? It could have only one instance and wouldn't
- provide any additional abstraction. Any opinions?
-
- Brian Quinlan
- quinlan@sfu.ca
-
- --
-
- Brian Quinlan
- quinlan@sfu.ca
-
- +++++++++++++++++++++++++++
-
- >From popovic@minerva.cis.yale.edu (Igor Popovic)
- Date: 12 May 1995 04:23:30 GMT
- Organization: Yale University
-
- Brian Quinlan (quinlan@kits.sfu.ca) wrote:
- : I'm writing a medium sized program right now using a combination of object
- : oriented and procedural code. For example, I use objects for my windows and
- : most of my data structures but not my event loop. I can't seem to decide
- : whether to use object oriented techniques on code that, if it was object
- : oriented, could have only one instance. For example, why would I make my
- : preferences code into an object? It could have only one instance and wouldn't
- : provide any additional abstraction. Any opinions?
-
- there probably is no immediately apparent advantage in having your
- preferences objectified (for example) but in the long run and in a large
- program it might be convenient to have a class CPreferenceServer (or
- CPreferenceManager or something along these lines) with just
- one instance (presumably a global one), mainly as a means to
- bundle a bunch of preference-related functions (reading, setting,
- saving ...) as methods. but i guess it's really mainly a matter
- of style, for me it helps to think of my programs as a bunch of
- specialized objects, each responsible for a specific task or class
- of tasks, ideally sitting in its own source file and quite
- independent of the others. --Igor++
-
- +++++++++++++++++++++++++++
-
- >From BrianS@pbcomputing.com (Brian Stern)
- Date: Thu, 11 May 1995 23:51:12 -0500
- Organization: The University of Texas at Austin, Austin, Texas
-
- In article <quinlan.800090744@sfu.ca>, quinlan@kits.sfu.ca (Brian Quinlan)
- wrote:
-
- < I'm writing a medium sized program right now using a combination of object
- < oriented and procedural code. For example, I use objects for my windows and
- < most of my data structures but not my event loop. I can't seem to decide
- < whether to use object oriented techniques on code that, if it was object
- < oriented, could have only one instance. For example, why would I make my
- < preferences code into an object? It could have only one instance and wouldn't
- < provide any additional abstraction. Any opinions?
- <
- < Brian Quinlan
- < quinlan@sfu.ca
-
- If you ever write a second application you might reuse your preferences
- class. I've written a prefs class (actually I've got a version for TCL
- and one for PP). This class inherits from the file class of the framework
- so it automatically knows about opening, closing, specifying, and other
- file related stuff. My prefs base class knows about the Preferences
- folder, it knows how to read in the preferences handle, it knows how to
- create itself if it doesn't exist and it's asked to open itself, it knows
- how to update the preferences handle if it's dirty. The derived class
- provides the name and creator of the file, it allocates the prefs handle
- and fills it with the default values, and it provides the accessor
- function(s) as needed. Reuse of this class means that I'll only have to
- write a constructor that is a few lines and the createdefault methods.
- (If I'm good I'll write the verifyprefs method as well).
-
- The event loop is exactly the sort of code that I don't want to look at.
- When I start a new project I don't want to start cutting and pasting event
- loops and handleMouseDown code from my old projects. I just want to
- inherit from a nice application class that takes care of all that and
- calls my code when something interesting is going to happen.
-
- I find that working like this saves my time and things tend to work
- better, sooner.
-
- Cheers,
-
- ____________________________________________________________________
- Brian Stern {:-{)} BrianS@pbcomputing.com
- Toolbox commando and Menu bard. Will FlushCache for Cash
-
- +++++++++++++++++++++++++++
-
- >From Willy.DeWaele@ping.be (WDW)
- Date: Fri, 12 May 1995 00:32:25 +0200
- Organization: PING Belgium
-
- In article <quinlan.800090744@sfu.ca>, quinlan@kits.sfu.ca (Brian Quinlan)
- wrote:
-
- >For example, why would I make my
- >preferences code into an object? It could have only one instance and wouldn't
- >provide any additional abstraction. Any opinions?
- >
- >Brian Quinlan
-
- Yes, to re-use of your code, in the future you can use the same class (from your library) or eventually create a subclass with trivial overridings.
- In some frameworks (ie MacApp) there is even a class for Str255, IMHO this goes too far ...
-
- Willy
-
- --
- Willy De Waele
- Internet: Willy.DeWaele@ping.be AppleLink: DEWAELE.W
- TAKE & GIVE (GUIDE)
-
- +++++++++++++++++++++++++++
-
- >From 3gl21@qlink.queensu.ca (Gregory Lo)
- Date: Fri, 12 May 1995 06:54:23 -0400
- Organization: Queen's University
-
- In article <3ouns2$oku@news.ycc.yale.edu>, popovic@minerva.cis.yale.edu
- (Igor Popovic) wrote:
-
- >Brian Quinlan (quinlan@kits.sfu.ca) wrote:
- >: I'm writing a medium sized program right now using a combination of object
- >: oriented and procedural code. For example, I use objects for my windows and
- >: most of my data structures but not my event loop. I can't seem to decide
- >: whether to use object oriented techniques on code that, if it was object
- >: oriented, could have only one instance. For example, why would I make my
- >: preferences code into an object? It could have only one instance and wouldn't
- >: provide any additional abstraction. Any opinions?
- >
-
- [Everything Igor said goes for me too]
-
- I agree with all of what Igor wrote in reply. I also think that a
- well-built preference class helps in terms of code reuse. You could use
- the same basic code in several different projects, with a minimum of
- modification for specialized functionality.
-
- - ---------------------------------------------------------
- Gregory Lo GLo ?:^(> <mailto:3gl21@qlink.queensu.ca>
- <mailto:log@declab.queensu.ca> <mailto:greglo@io.org>
-
- +++++++++++++++++++++++++++
-
- >From pottier@felouque.ens.fr (Francois Pottier)
- Date: 12 May 1995 12:11:22 GMT
- Organization: Ecole Normale Superieure, Paris
-
- In article <quinlan.800090744@sfu.ca>,
- Brian Quinlan <quinlan@kits.sfu.ca> wrote:
-
- >oriented, could have only one instance. For example, why would I make my
- >preferences code into an object? It could have only one instance and wouldn't
- >provide any additional abstraction. Any opinions?
-
- My preferences class has one virtual method, GetDefaultSetting,
- whose job is to provide default settings. This way the base class
- is the same for all programs I write, and I override it in each
- program to define defaults. Looks great.
-
-
-
- --
- Francois Pottier pottier@dmi.ens.fr
- - ----------------------------------------------------------------------------
- Check my WWW page at http://acacia.ens.fr:8080/home/pottier/ ...
-
- +++++++++++++++++++++++++++
-
- >From alain@cs.uchicago.edu (Alain Roy)
- Date: Fri, 12 May 1995 13:57:03 GMT
- Organization: None
-
- In article <BrianS-1105952351120001@slip-2-35.ots.utexas.edu>,
- BrianS@pbcomputing.com (Brian Stern) wrote:
-
- >If you ever write a second application you might reuse your preferences
- >class.
-
- I recently wrote a bunch of C code to deal with preferences.
-
- When I moved it to another application, it took about 5 minutes or less to
- get it working, and that was just because the preferences themselves
- changed.
-
- When I moved it to yet another application that needed something different
- (variable length preferences instead of static length), it took me maybe
- 20 minutes to modify the code. (I suspect that the same thing would happen
- in C++ if you made the same assumption of static length preferences
- originally that I did.)
-
- Why would C++ make my code here more reusable? I seemed to reuse it in C
- just fine.
-
- (This isn't a flame, but I'm honestly curious about the answer. I use C++,
- but only in small doses.)
-
- -alain
-
- +++++++++++++++++++++++++++
-
- >From dwhitney@CS.Stanford.EDU (David J. Whitney)
- Date: 13 May 1995 01:07:26 GMT
- Organization: Computer Science Department, Stanford University.
- In article <alain-1205950857030001@hammer.uchicago.edu>, alain@cs.uchicago.edu (Alain Roy) writes:
- |> In article <BrianS-1105952351120001@slip-2-35.ots.utexas.edu>,
- |> BrianS@pbcomputing.com (Brian Stern) wrote:
- |>
- |> >If you ever write a second application you might reuse your preferences
- |> >class.
- |>
- |> I recently wrote a bunch of C code to deal with preferences.
- |>
- |> When I moved it to another application, it took about 5 minutes or less to
- |> get it working, and that was just because the preferences themselves
- |> changed.
- |>
- |> When I moved it to yet another application that needed something different
- |> (variable length preferences instead of static length), it took me maybe
- |> 20 minutes to modify the code. (I suspect that the same thing would happen
- |> in C++ if you made the same assumption of static length preferences
- |> originally that I did.)
- |>
- |> Why would C++ make my code here more reusable? I seemed to reuse it in C
- |> just fine.
- |>
- |> (This isn't a flame, but I'm honestly curious about the answer. I use C++,
- |> but only in small doses.)
-
- The issue here isn't really C++ vs C. Sure an object and a well written C
- library can operate very similarly. What is important is Object Oriented
- *Design*. Thinking of things in terms of data, and not in terms of functions.
- That is what has saved me countless hours of C code tweaking and subsequent
- ripple effects through out the rest of my code.
-
- The gain with OOP is that when you have 20 applications based on that
- Preference Manager and you come a across a bug, you have to change it 20
- times. Or just fix your object and relink. Note that this can be said also
- of a well written C library with consistent API. But how many consistent APIs
- do you have lying around? OOP forces (allows, encourages?) you to have a
- consistent API to your objects.
-
- But even more, it is thinking in terms of data. Procedures fall out from what
- the data is you are using. Not the other way around. I took a 5 day class
- (work paid) on Object oriented design (anyone can pick up C++), and that
- changed my outlook completely. It's hard to describe, and making the switch
- *is* hard, but my life is so much simpler now. Given the choice between
- learning OO programming and OO design, learn to design first.
-
- disclaim, disclaim, disclaim. your mileage may vary.
-
- -Dave
-
- --
- ____________________________________________________________________________
- David Whitney | Cooper: Wanna know why I'm whittling?
- david.whitney@arc.nasa.gov | Truman: OK, I'll bite. Why are you whittling?
- Graphics and Visualization | Cooper: Because that's what you do in a
- Sterling Software | town where a yellow light still means
- NASA Ames, Mtn View, CA | slow down, not speed up.
- Not an indication of Sterling or NASA's opinion
-
- +++++++++++++++++++++++++++
-
- >From Seth Tager <sdt>
- Date: 12 May 1995 06:19:16 GMT
- Organization: Brown University
-
- quinlan@kits.sfu.ca (Brian Quinlan) wrote:
- >I'm writing a medium sized program right now using a combination of object
- >oriented and procedural code. For example, I use objects for my windows and
- >most of my data structures but not my event loop. I can't seem to decide
- >whether to use object oriented techniques on code that, if it was object
- >oriented, could have only one instance. For example, why would I make my
- >preferences code into an object? It could have only one instance and wouldn't
- >provide any additional abstraction. Any opinions?
-
- I think this is an interesting question. If you already have working code and
- you can't imagine the program growing beyond a managable size then you're
- probably better off sticking with what you've got in order to avoid 1) having
- to debug code that already works, and 2) the possibility (or probability)
- that you will wind up coding yourself into spaghetti by incrementally designing
- and implementing the "once-only" application code. If you look at some mature
- application frameworks (the Think Class Library, for example) you'll see that
- they manage to get reuse and maintainability out of some of the ways that
- they use their application classes (which take care of things like the event
- loop).
-
- As far as something like preferences goes, there are ways you could save
- yourself some work by identifying the abstract behavior of preferences.
- For example, are preferences saved in resources, as a separate data file,
- or some other way? (or a combination of these) The mechanism for storing data
- is something that you'll probably use more than once. If not in this program
- then definitely in the next. If you can establish a scheme that works for you
- then you'll save yourself time in the long run.
-
- Commercial frameworks are something to consider (eventually). If you're far
- enough along with the project you're working on then you might want to just
- get it finished. The good things about established frameworks is that
- someone (expert?) has spent a lot of time working out the problems. They're
- good to study just to get some ideas. Drawbacks are 1) steep
- learning curve and 2) you become heavily invested in someone else's work. If
- it breaks or becomes obsolete (they stop supporting it) your out of luck.
-
- Hope this helps,
- Seth
-
-
- +++++++++++++++++++++++++++
-
- >From sandvik@apple.com (Kent Sandvik)
- Date: Sun, 14 May 1995 19:22:46 -0800
- Organization: Apple Computer, Inc. Developer Technical Support
-
- In article <quinlan.800090744@sfu.ca>, quinlan@kits.sfu.ca (Brian Quinlan)
- wrote:
-
- > I'm writing a medium sized program right now using a combination of object
- > oriented and procedural code. For example, I use objects for my windows and
- > most of my data structures but not my event loop. I can't seem to decide
- > whether to use object oriented techniques on code that, if it was object
- > oriented, could have only one instance. For example, why would I make my
- > preferences code into an object? It could have only one instance and wouldn't
- > provide any additional abstraction. Any opinions?
-
- If it ain't broke, don't fix it. I've seen cases where programmers rewrite
- fully working code just because it's not object oriented.
-
- If you really want to start breaking out usable modules, you could indeed
- write a preferencefile class, or something similar, instantiate it and
- use it inside your procedural environment. Then again if you spend a lot
- of time writing a class, and all it does is to read and write a simple
- preference setting, maybe a WriteMyPreferences() and ReadMyPreferences()
- is all you need. I also think that copy/paste is a very powerful code
- reusability technique.
-
- --Kent
-
- --
- Kent Sandvik sandvik@apple.com Working with Multimedia stuff...
- Apple Developer Technical Support. Private activities on Internet.
-
- +++++++++++++++++++++++++++
-
- >From pottier@brick.ens.fr (Francois Pottier)
- Date: 15 May 1995 11:20:32 GMT
- Organization: Ecole Normale Superieure, Paris
-
- In article <sandvik-1405951922460001@17.255.38.116>,
- Kent Sandvik <sandvik@apple.com> wrote:
-
- >I also think that copy/paste is a very powerful code
- >reusability technique.
-
- But it becomes a pain when your code is shared between several
- projects. And that is bound to happen to all professionals and even
- serious hobbyists.
-
- --
- Francois Pottier pottier@dmi.ens.fr
- - ----------------------------------------------------------------------------
- Check my WWW page at http://acacia.ens.fr:8080/home/pottier/ ...
-
- +++++++++++++++++++++++++++
-
- >From mhl@icf.hrb.com (Mark H. Linton)
- Date: 15 May 95 11:42:05 EST
- Organization: HRB Systems, Inc.
-
- In article <3p10oe$a7t@Radon.Stanford.EDU>,
- dwhitney@CS.Stanford.EDU (David J. Whitney) writes:
- > The issue here isn't really C++ vs C.
-
- True statement...
-
- > Sure an object and a well written C library can operate very similarly.
-
- In fact they can be identical (e.g. CFront)
-
- > What is important is Object Oriented *Design*.
-
- Again, true.
-
- > Thinking of things in terms of data, and not in terms of functions.
-
- You are thinking of Jackson Structured Design (JSD) originally
- described by Micheal Jackson (not the singer). Also, my personal
- favorite =^) although, not the ONLY OOD technique. Booch comes to
- mind fairly quickly.
-
- > That is what has saved me countless hours of C code tweaking and
- > subsequent ripple effects through out the rest of my code.
-
- To be replaced by countless hours of C++ code tweaking, perhaps? =^)
-
- > The gain with OOP is that when you have 20 applications based on
- > that Preference Manager and you come a across a bug, you have to
- > change it 20 times. Or just fix your object and relink.
-
- Or just fix your library and relink.
-
- > Note that this can be said also of a well written C library with
- > consistent API. But how many consistent APIs do you have lying
- > around?
-
- For the naive reader, note here that the comment about the
- consistency of APIs does not mention languages. It is just as easy
- to write an inconsistent API in C++ as with C. And, in fact, this
- is the case. The API is a function of the designer and not the
- language. OOA/OOD/OOP is an attempt to educate the designers. C++
- does support enforcement mechanisms for some of the concepts, but
- they do not force you to do a good design. Design pre-dates
- coding, so that by the time you get to your first compile (the
- first chance the language gets to help you) it is already too
- late. This was Grady Booch's idea in trying to develop tools that
- would allow you to do OOA/OOD before you had to worry about doing
- OOP.
-
- > OOP forces (allows, encourages?) you to have a
- > consistent API to your objects.
-
- False. OOP forces you to STICK TO you consistent API assuming that
- you have put one in place in your design. It also allows you to
- modify your IMPLEMENTATION of you design without breaking your
- API.
-
- > But even more, it is thinking in terms of data. Procedures fall
- > out from what the data is you are using. Not the other way
- > around. I took a 5 day class (work paid) on Object oriented
- > design (anyone can pick up C++), and that changed my outlook
- > completely. It's hard to describe, and making the switch *is*
- > hard, but my life is so much simpler now. Given the choice
- > between learning OO programming and OO design, learn to design
- > first.
-
- ...and this explains why he has a consistent API (me too, BTW)...
-
- Definitely, most emphatically, YES. Take a class at your local
- university. Even if you consider yourself an expert, it will be a
- real eye-opener. I figure your future is worth a couple of hundred
- bucks (your employeer should, also).
-
- > disclaim, disclaim, disclaim. your mileage may vary.
-
- Not really a flame, just a clarification. =^)
-
- > -Dave
- >
- > --
- > ____________________________________________________________________________
- > David Whitney | Cooper: Wanna know why I'm whittling?
- > david.whitney@arc.nasa.gov | Truman: OK, I'll bite. Why are you whittling?
- > Graphics and Visualization | Cooper: Because that's what you do in a
- > Sterling Software | town where a yellow light still means
- > NASA Ames, Mtn View, CA | slow down, not speed up.
- > Not an indication of Sterling or NASA's opinion
- --
- Hope this helps.
-
- Mark H. Linton
- ____________________________________________________________________
- mark \'mdrk\ n [ME, fr. OE mearc boundary, march, sign; akin to OHG
- marha boundary, L margo] 1 a : a conspicuous object serving as a guide
- for travelers 2 : A standard or criterion of quality 3 : An object or
- point that serves as a guide --idiom. mark time. 1 : To make little or
- no progress
-
- +++++++++++++++++++++++++++
-
- >From ldo@waikato.ac.nz (Lawrence D9Oliveiro)
- Date: Tue, 16 May 1995 11:41:44 +1200
- Organization: University of Waikato
-
- In article <alain-1205950857030001@hammer.uchicago.edu>,
- alain@cs.uchicago.edu (Alain Roy) wrote:
-
- >In article <BrianS-1105952351120001@slip-2-35.ots.utexas.edu>,
- >BrianS@pbcomputing.com (Brian Stern) wrote:
- >
- >>If you ever write a second application you might reuse your preferences
- >>class.
- >
- >I recently wrote a bunch of C code to deal with preferences.
- >
- >When I moved it to another application, it took about 5 minutes or less to
- >get it working, and that was just because the preferences themselves
- >changed.
- >
- >When I moved it to yet another application that needed something different
- >(variable length preferences instead of static length), it took me maybe
- >20 minutes to modify the code. (I suspect that the same thing would happen
- >in C++ if you made the same assumption of static length preferences
- >originally that I did.)
- >
- >Why would C++ make my code here more reusable? I seemed to reuse it in C
- >just fine.
-
- This is a valid question to ask, and judging from reports I've been
- reading, C++ (and OOP in general) hasn't been making much difference to
- the amount of code that people have been able to reuse.
-
- I like to think I've been having quite a good success rate with reusable
- code myself, using techniques that have little or nothing to do with
- "object-orientation"--I've done a couple of fully AppleScriptable,
- recordable applications with better than 60% code reuse.
-
- To give you an idea of how I did it, I've just publicly released my entire
- collection of standard libraries. Have a look at
- <http://www2.waikato.ac.nz/ldo/sw/index.html#MyModLib>.
-
- Lawrence D'Oliveiro fone: +64-7-856-2889
- Info & Tech Services Division fax: +64-7-838-4066
- University of Waikato electric mail: ldo@waikato.ac.nz
- Hamilton, New Zealand 37^ 47' 26" S, 175^ 19' 7" E, GMT+12:00
-
- +++++++++++++++++++++++++++
-
- >From ari@shore.net (Ari Halberstadt)
- Date: Thu, 18 May 1995 00:19:57 -0400
- Organization: North Shore Access/Eco Software, Inc; (info@shore.net)
-
- In article <sandvik-1405951922460001@17.255.38.116>, sandvik@apple.com
- (Kent Sandvik) wrote:
-
- > In article <quinlan.800090744@sfu.ca>, quinlan@kits.sfu.ca (Brian Quinlan)
- > wrote:
- >
- > > I'm writing a medium sized program right now using a combination of object
- > > oriented and procedural code. For example, I use objects for my windows and
- > > most of my data structures but not my event loop. I can't seem to decide
- > > whether to use object oriented techniques on code that, if it was object
- > > oriented, could have only one instance. For example, why would I make my
- > > preferences code into an object? It could have only one instance and
- wouldn't
- > > provide any additional abstraction. Any opinions?
- >
- > If it ain't broke, don't fix it. I've seen cases where programmers rewrite
- > fully working code just because it's not object oriented.
- >
- > If you really want to start breaking out usable modules, you could indeed
- > write a preferencefile class, or something similar, instantiate it and
- > use it inside your procedural environment. Then again if you spend a lot
- > of time writing a class, and all it does is to read and write a simple
- > preference setting, maybe a WriteMyPreferences() and ReadMyPreferences()
- > is all you need. I also think that copy/paste is a very powerful code
- > reusability technique.
-
- Sometimes it ain't broke until the system changes. I have a C program I
- was working on, and it stored prefs as bitmapped structures (not
- graphics!). This was all fine and dandy with 68k programs, but became a
- pain with PPC programs. I'd have things like this in my code (which I did
- to get a quick port):
-
- /* comment to explain this mess */
- #if PRAGMA_ALIGN_AVAILABLE // shut up THINK C
- #pragma align=mac68k
- #endif
- typedef struct {
- short font;
- short style;
- ...
- } tPortTextSettings;
- #if PRAGMA_ALIGN_AVAILABLE // shut up THINK C
- #pragma align=reset
- #endif
-
- A pain, but it worked, assuming I remembered to keep all my pragmas in
- order. But wait, I then decided to use floating point numbers to store
- coordinates, so my window records contained rectangles that could be made
- of floating point values. There is no such thing as a common floating
- point format (there are several, but you can't convince your compiler to
- use them when you need 'em), so I use extended80 since it's a mac only
- program and it's easy to convert to/from long double/extended80. Whoops,
- no more bitmapped structures.
-
- Time to get rid of those ugly pragmas anyway. Time for what? A streams
- library. Cool, now I stream my data. Doesn't this thing come with C++? Oh
- well, I wrote it from scratch. Not hard. It does have ugly switch
- statements to go to file, resource, handle, pointer, not as easily
- extensible as a class. Now, to save my floating point numbers, I made a
- typed stream library, bundled it all together, and rewrote my data saving
- routines (not too many for this app). The typed stream library does a few
- other useful things.
-
- In the end, I didn't change my preferences file library, but I did change
- the IO routines for my preferences and other data. Hmm, I'm not sure how
- this ties in with this thread, except that I think it might have been
- easier to use C++, a framework, and someone else's streams (or to have
- coded it that way in the first place), and it has little to do with code
- reuse in this instance. Though this thread was also about prefs, so I
- thought I'd babble a bit.
-
- +++++++++++++++++++++++++++
-
- >From sandvik@apple.com (Kent Sandvik)
- Date: Wed, 17 May 1995 22:01:50 -0800
- Organization: Apple Computer, Inc. Developer Technical Support
-
- In article <3p7de1$m9o@nef.ens.fr>, pottier@brick.ens.fr (Francois
- Pottier) wrote:
-
- > In article <sandvik-1405951922460001@17.255.38.116>,
- > Kent Sandvik <sandvik@apple.com> wrote:
- >
- > >I also think that copy/paste is a very powerful code
- > >reusability technique.
- >
- > But it becomes a pain when your code is shared between several
- > projects. And that is bound to happen to all professionals and even
- > serious hobbyists.
-
- That's why I like Metrowerks and the path statement settings, most of my
- common code is in a specific folder...
-
- --Kent
-
- --
- Kent Sandvik sandvik@apple.com Working with Multimedia stuff...
- Apple Developer Technical Support. Private activities on Internet.
-
- +++++++++++++++++++++++++++
-
- >From sandvik@apple.com (Kent Sandvik)
- Date: Wed, 17 May 1995 22:06:51 -0800
- Organization: Apple Computer, Inc. Developer Technical Support
-
- In article <ldo-1605951141440001@130.217.96.144>, ldo@waikato.ac.nz wrote:
- > I like to think I've been having quite a good success rate with reusable
- > code myself, using techniques that have little or nothing to do with
- > "object-orientation"--I've done a couple of fully AppleScriptable,
- > recordable applications with better than 60% code reuse.
-
- Hear hear! Actually I program nowadays in plain C with sort of object-ism
- by passing around known structures, ok I call them objects, from one
- function to another. As I spend most of my time with QT programming
- nowadays, I pass around movies,tracks, movie controllers and so on. I have
- for instance a function for checking if a particular media type is present
- in a movie, called QTUMediaTypeInTrack. It takes a movie and a media type,
- returns true or false. Pretty simple, it's encapsulating code, and no C++
- needed.
-
- C++ is sometimes nice for hiding global state, I must admit...
-
- --Kent
- PS: Check out,
- ftp://ftp.info.apple.com/dts/dtsqtutils.May95.hqx
-
- --
- Kent Sandvik sandvik@apple.com Working with Multimedia stuff...
- Apple Developer Technical Support. Private activities on Internet.
-
- +++++++++++++++++++++++++++
-
- >From jayfar@netaxs.com (Jay Farrell)
- Date: Thu, 18 May 1995 09:36:53 -0500
- Organization: Jayfar's Web
-
- In article <sandvik-1705952206510001@17.255.38.116>, sandvik@apple.com
- (Kent Sandvik) wrote:
-
- [deleted]
-
- > PS: Check out,
- > ftp://ftp.info.apple.com/dts/dtsqtutils.May95.hqx
- >
- To which Fetch responds: No Such File...
-
- Jayfar
- - -------------------------------------------------------------------
- Jay Farrell <URL:http://www.netaxs.com/~jayfar/>
- jayfar@netaxs.com
- Philadelphia, Pennsylvania, USA
- ///////////////////////////////////////////////////////////////////
- /// The Mops Page <URL:http://www.netaxs.com/~jayfar/mops.html> ///
- ///////////////////////////////////////////////////////////////////
-
- +++++++++++++++++++++++++++
-
- >From sandvik@apple.com (Kent Sandvik)
- Date: Sun, 21 May 1995 14:54:13 -0800
- Organization: Apple Computer, Inc. Developer Technical Support
-
- In article <jayfar-1805950936530001@slip-794.netaxs.com>,
- jayfar@netaxs.com (Jay Farrell) wrote:
-
- > In article <sandvik-1705952206510001@17.255.38.116>, sandvik@apple.com
- > (Kent Sandvik) wrote:
- >
- > [deleted]
- >
- > > PS: Check out,
- > > ftp://ftp.info.apple.com/dts/dtsqtutils.May95.hqx
- > >
- > To which Fetch responds: No Such File...
-
- Ouch, sorry, me and too many URLs in my brain; the real one (after
- triple-checking) is:
-
- ftp://ftp.info.apple.com/dts/quicktime/dtsqtutils.May95.hqx
-
- It's worth checking that quicktime sub-directory now and then as we upload
- QuickTime related material into this place.
-
- --Kent
-
- --
- Kent Sandvik sandvik@apple.com Working with Multimedia stuff...
- Apple Developer Technical Support. Private activities on Internet.
-
- ---------------------------
-
- >From dubois@uakari.primate.wisc.edu (Paul DuBois)
- Subject: TransSkel 3.20 is available (CW 6 - SC++ 8)
- Date: 26 May 1995 18:38:47 -0500
- Organization: Castra Parvulorum
-
- Release 3.20 of TransSkel, a skeleton for Macintosh application development
- under MetroWerks C or Symantec C++/THINK C, is now available.
-
- This is an update release; it compiles under MetroWerks CodeWarrior 6
- (PPC or 68K) as well as Symantec C++ (PPC) and THINK C 8 (68K).
-
- TransDisplay 3.09 and TransEdit 3.09 are also available now, and have been
- updated in similar ways. TransDisplay and TransEdit are modules that can
- be dropped into TransSkel-based projects to provide display-only or editable
- text windows.
-
- TransSkel, TransDisplay, and TransEdit are available via any of the following:
-
- anonymous ftp to ftp.primate.wisc.edu (under /pub/mac/TransSkel)
-
- gopher to gopher.primate.wisc.edu, then select "Primate Center Software
- Archives")
-
- WWW using URL http://www.primate.wisc.edu/software/mac/TransSkel/.
-
- --
- Paul DuBois
- dubois@primate.wisc.edu
-
- "I'm going to learn worm-talk next," said Janetta -- Grandaddy's Place
-
- ---------------------------
-
- >From schmeul@umich.edu (Sam Huffman)
- Subject: malloc vs. NewPtr
- Date: 17 May 1995 16:36:25 GMT
- Organization: University of Michigan
-
- Can anyone tell me exactly what the difference is between using the ANSI
- malloc() and the Toolbox NewPtr() for allocating memory? My understanding
- is that malloc is more standard and more efficient. So why would one use
- NewPtr?
-
- I have an ulterior motive in asking this question. In a program I am
- writing I make use of several linked lists. The program must run on both
- UNIX and Mac platforms, so I have been separating the interface from the
- lower-level functions. To facilitate this, I tried to use malloc when
- allocating memory for the list. For some reason, however, the memory
- returned by malloc was already in use by the system (I first figured this
- out when, after writing to one of the memory locations, my menubar turned
- purple =) Upon closer examination, the memory addresses I was getting
- seemed to be in the range xC02 and upward. I had always been under the
- impression that lower memory values were reserved by the system. When I
- switched to NewPtr, everything worked fine and my memory range seemed to
- be more logical.
-
- So, can anyone tell me
- 1) Why malloc is giving me memory that is already in use,
- 2) How I can get it to give me my own memory rather than someone else's
- 3) Would I be better off just using NewPtr (time isn't critical here) and
- changing it to malloc for the UNIX implementation
-
- Thank you very much.
-
- Sam Huffman
- schmeul@umich.edu
-
- +++++++++++++++++++++++++++
-
- >From allender@prairienet.org (Mark W. Allender)
- Date: 18 May 1995 13:06:45 GMT
- Organization: Prairienet, the East-Central Illinois Free-Net
-
- Sam Huffman (schmeul@umich.edu) wrote:
- : So, can anyone tell me
- : 1) Why malloc is giving me memory that is already in use,
-
- What you described sounds very strange indeed. What compiler/linker setup
- are you using. I have never seen this behaviour with either CW5 or MPW C.
-
- : 2) How I can get it to give me my own memory rather than someone else's
-
- It should do that. Something else is wrong here.
-
- : 3) Would I be better off just using NewPtr (time isn't critical here) and
- : changing it to malloc for the UNIX implementation
-
- This question is a good one. I have talked with several people who have
- told me different things. If speed is not important, and portability is, I
- would use malloc (assuming that it is working properly). malloc will give
- you a pointer just like NewPtr will. If speed is important, then I can't
- answer the question for you. I am using NewPtr in my apps, but I have put
- a wrapper around all of my memory allocation and free calls so that I can
- change the method of allocation easily. (I can also track down annoying
- little memory problems this way too!).
-
- --
- -Mark Allender
- -Parallax Software
- -allender@prairienet.org
-
- +++++++++++++++++++++++++++
-
- >From Hank.Dolben@UNH.edu (Hank Dolben)
- Date: Thu, 18 May 1995 16:11:03 -0400
- Organization: University of New Hampshire
-
- In article <schmeul-1705951234020001@162.48.124.18>, schmeul@umich.edu
- (Sam Huffman) wrote:
-
- > Can anyone tell me exactly what the difference is between using the ANSI
- > malloc() and the Toolbox NewPtr() for allocating memory?
-
- I don't know what development system you use. In the THINK C ANSI library
- (the version I have), malloc is implemented by calling NewPtr. So, it's
- *not* more efficient. I use malloc for "portable" code and NewPtr for
- strictly Mac code to avoid having to include the ANSI library. I haven't
- had any trouble with malloc when I've used it. Maybe a time bomb went off
- for you, i.e., a bug may still be lurking in your code (that's always a
- safe bet isn't it? :-).
-
- Hank Dolben Space Science Center
- Hank.Dolben@UNH.edu University of New Hampshire
-
- +++++++++++++++++++++++++++
-
- >From Hank.Dolben@UNH.edu (Hank Dolben)
- Date: Fri, 19 May 1995 09:26:16 -0400
- Organization: University of New Hampshire
-
- In article <Hank.Dolben-1805951611030001@whd.unh.edu>, I wrote:
-
- > In the THINK C ANSI library (the version I have), malloc is implemented by
- > calling NewPtr. So, it's *not* more efficient.
-
- OK, that was a bogus thing to say. Excuse me. Of course, it *is* possible
- to improve efficiency by adding a layer of software. I do it all the time.
- In fact, I don't know whether or not the THINK C implementation of malloc
- accomplishes this. I'd have to test it, just as I do my own attempts.
-
- Hank Dolben Space Science Center
- Hank.Dolben@UNH.edu University of New Hampshire
-
- +++++++++++++++++++++++++++
-
- >From kenp@nmrfam.wisc.edu (Ken Prehoda)
- Date: Fri, 19 May 1995 10:06:08 -0500
- Organization: Univ of Wisc-Madison, Dept of Biochemistry
-
- In article <3pfgp5$ji@vixen.cso.uiuc.edu>, allender@prairienet.org (Mark
- W. Allender) wrote:
-
- : Sam Huffman (schmeul@umich.edu) wrote:
- : : So, can anyone tell me
- : : 1) Why malloc is giving me memory that is already in use,
- :
- : What you described sounds very strange indeed. What compiler/linker setup
- : are you using. I have never seen this behaviour with either CW5 or MPW C.
- :
- : : 2) How I can get it to give me my own memory rather than someone else's
- :
- : It should do that. Something else is wrong here.
- :
- : : 3) Would I be better off just using NewPtr (time isn't critical here) and
- : : changing it to malloc for the UNIX implementation
- :
- : This question is a good one. I have talked with several people who have
- : told me different things. If speed is not important, and portability is, I
- : would use malloc (assuming that it is working properly). malloc will give
- : you a pointer just like NewPtr will. If speed is important, then I can't
- : answer the question for you. I am using NewPtr in my apps, but I have put
- : a wrapper around all of my memory allocation and free calls so that I can
- : change the method of allocation easily. (I can also track down annoying
- : little memory problems this way too!).
-
- malloc is a _lot_ faster than NewPtr() for allocating a lot of small
- objects. Most implementations of malloc simply call NewPtr() for
- allocation of large objects.
-
- --
- Ken Prehoda, kenp@nmrfam.wisc.edu
-
- +++++++++++++++++++++++++++
-
- >From demos@amug.org (Demos)
- Date: Thu, 18 May 1995 23:55:56 -0700
- Organization: University of Utah
-
- > This question is a good one. I have talked with several people who have
- > told me different things. If speed is not important, and portability is, I
- > would use malloc (assuming that it is working properly). malloc will give
- > you a pointer just like NewPtr will. If speed is important, then I can't
- > answer the question for you. I am using NewPtr in my apps, but I have put
- > a wrapper around all of my memory allocation and free calls so that I can
- > change the method of allocation easily. (I can also track down annoying
- > little memory problems this way too!).
-
- And the answer is simple:
-
- If you want your program to be compilable on other platforms - use malloc,
- otherwise - use NewPtr.
-
- Demos
-
- _____________________________________________________________________
- Demos <demos@amug.org> | IRC: #macdev | ftp://amug.org/pub/demos
-
- +++++++++++++++++++++++++++
-
- >From kenp@nmrfam.wisc.edu (Ken Prehoda)
- Date: Fri, 19 May 1995 13:25:38 -0500
- Organization: Univ of Wisc-Madison, Dept of Biochemistry
-
- In article <demos-1805952355560001@chem-31.chem.utah.edu>, demos@amug.org
- (Demos) wrote:
-
- : > This question is a good one. I have talked with several people who have
- : > told me different things. If speed is not important, and portability is, I
- : > would use malloc (assuming that it is working properly). malloc will give
- : > you a pointer just like NewPtr will. If speed is important, then I can't
- : > answer the question for you. I am using NewPtr in my apps, but I have put
- : > a wrapper around all of my memory allocation and free calls so that I can
- : > change the method of allocation easily. (I can also track down annoying
- : > little memory problems this way too!).
- :
- : And the answer is simple:
- :
- : If you want your program to be compilable on other platforms - use malloc,
- : otherwise - use NewPtr.
- :
- : Demos
- :
- : _____________________________________________________________________
- : Demos <demos@amug.org> | IRC: #macdev | ftp://amug.org/pub/demos
-
- No, it's not quite that simple. If you program allocates a lot of small
- objects, then allocate them using malloc. Do you use operator new when
- you use C++? If so (and you are not overriding it), then you are using a
- memory system similar to malloc (if not malloc itself). In fact, if you
- want to see just how slow NewPtr is, override operator new to just call
- NewPtr. If your program has many memory allocations at all, there will be
- a very noticable difference.
-
- --
- Ken Prehoda, kenp@nmrfam.wisc.edu
-
- +++++++++++++++++++++++++++
-
- >From Narayanan Lakshmanan <narayanan.lakshmanan@hec.mcdermott.com>
- Date: 22 May 1995 14:31:30 GMT
- Organization: McDermott, Inc.
-
- First, I have never had malloc return memory that is "in-use", thus I
- suggest you look for a bug, perhaps in converting between
- shorts/ints/longs, etc. I have had that problem creep up when
- programmers assumed too much, especially in unix/mac conversions.
-
- Second, it is important to note that malloc had an upper limit beyond
- which it could not allocate a single memory block. I have not tested
- this recently, so I cannot give you all the details. However, when
- pursuing a similar porting trial, I had to resort to NewPtr in some
- cases. Verify this by allocating a single block that is greater than
- eight megabytes and see if it works for both malloc and NewPtr.
-
- Third, you really should use NewHandle since it is much faster (weird,
- but true!) for *larger* blocks. I have had occassions to allocate
- tremendous sized blocks, and the same code when rewritten to use
- NewHandle performed nearly 30% faster. Unfortunately, I have not gone
- back to see if this happens on the new Power Macs and their "modern"
- memory manager.
-
- -- Nary
-
-
-
- +++++++++++++++++++++++++++
-
- >From rac@intrigue.com (Robert Coie)
- Date: 22 May 1995 18:24:55 GMT
- Organization: Intrigue Corporation
-
- In article <3pq782$oaa@trakker.mcdermott.com>, Narayanan Lakshmanan
- <narayanan.lakshmanan@hec.mcdermott.com> wrote:
-
- : Third, you really should use NewHandle since it is much faster (weird,
- : but true!) for *larger* blocks. I have had occassions to allocate
- : tremendous sized blocks, and the same code when rewritten to use
- : NewHandle performed nearly 30% faster. Unfortunately, I have not gone
- : back to see if this happens on the new Power Macs and their "modern"
- : memory manager.
-
- It should. The reason NewHandle is usually much faster than NewPtr is
- that NewPtr always causes heap compaction, whereas NewHandle only does so
- if the amount of memory requested is not available otherwise.
-
- Robert Coie rac@intrigue.com
- Implementor, Intrigue Corporation AppleLink: INTRIGUE
-
- +++++++++++++++++++++++++++
-
- >From j friend <jfriend@xre2.iii.net>
- Date: 23 May 1995 11:07:45 GMT
- Organization: iii.net
-
- sstorkel@netcom12.netcom.com (Scott Storkel) wrote:
- >
- > In general, I try to avoid malloc() simply because I don't know what
- > it's going to do (or I do know, and I don't like it :-). I tend to use
- > NewPtr() or write custom allocators that are more efficient than
- > malloc()...
-
-
- careful of this - if you are allocating lots of samll peices of memory
- malloc may be MUCH more efficient than NewPtr because it will make fewer
- calls to NewPtr (which is very expensive) to get large blocks which
- it will then split up for you. In cases like this it can also prevent
- some fragmentation.
-
- jf
-
- +++++++++++++++++++++++++++
-
- >From sstorkel@best.com (Scott Storkel)
- Date: Tue, 23 May 1995 09:24:04 -0700
- Organization: Devious Software & Consulting
-
- In article <3psfmk$qs8@news.iii.net>, j friend <jfriend@xre2.iii.net> wrote:
-
- > sstorkel@netcom12.netcom.com (Scott Storkel) wrote:
- > >
- > > In general, I try to avoid malloc() simply because I don't know what
- > > it's going to do (or I do know, and I don't like it :-). I tend to use
- > > NewPtr() or write custom allocators that are more efficient than
- > > malloc()...
- >
- > careful of this - if you are allocating lots of samll peices of memory
- > malloc may be MUCH more efficient than NewPtr because it will make fewer
- > calls to NewPtr (which is very expensive) to get large blocks which
- > it will then split up for you. In cases like this it can also prevent
- > some fragmentation.
-
- Yes, I know. I've made the following observations about programs
- I've seen:
-
- They allocate small numbers of randomly sized objects.
- and
- They allocate large numbers of similarly sized objects.
-
- For like-sized objects, these are typically the small ones, I use a custom
- allocator which is *much* faster than malloc. For the randomly sized objects,
- I call NewPtr. In general, if I allocate something enough that the performance
- penalty for NewPtr would have an impact, I switch over to the custom allocator.
-
- I've found this to be a pretty decent solution in most cases. It does require
- more work than blindly calling NewPtr, but the results are generally better.
-
-
- -- Scott
-
- +++++++++++++++++++++++++++
-
- >From Narayanan Lakshmanan <narayanan.lakshmanan@hec.mcdermott.com>
- Date: 24 May 1995 12:59:33 GMT
- Organization: McDermott, Inc.
-
- >Any reason why you shouldn't allocate [a handle] first, then
- >MoveHHi and lock it so it's at the very top?
- >
- You may not know the size of the data at the beginning of the program.
-
- -- Nary
-
-
-
- +++++++++++++++++++++++++++
-
- >From dstone@alchemy.chem.utoronto.ca (David Stone)
- Date: Wed, 24 May 1995 13:53:18 GMT
- Organization: University of Toronto Chemistry
-
- In article <3pvajl$i60@trakker.mcdermott.com>, Narayanan Lakshmanan
- <narayanan.lakshmanan@hec.mcdermott.com> wrote:
- >
- > >Any reason why you shouldn't allocate [a handle] first, then
- > >MoveHHi and lock it so it's at the very top?
- > >
- > You may not know the size of the data at the beginning of the program.
- >
- > -- Nary
-
- Actually, I do - and it's there from startup to quitting time. (I use the
- sizeof() function on my data type to do the allocation). So I guess
- there's
- nothing wrong with this approach, then?
-
- Dave Stone
-
- +++++++++++++++++++++++++++
-
- >From Duane Murphy <Duane_Murphy@Novell.Com>
- Date: 24 May 1995 14:32:34 GMT
- Organization: Novell, Inc.
-
- In article <dstone-240595095735@csgmac.chem.utoronto.ca> David Stone,
- dstone@alchemy.chem.utoronto.ca writes:
- >Actually, I do - and it's there from startup to quitting time. (I use the
- >sizeof() function on my data type to do the allocation). So I guess
- >there's
- >nothing wrong with this approach, then?
- >
-
- Normally, handles are used for data that is transient in nature or that
- can float. Transient in the sense that you allocate it, use it for a
- period of time and then deallocate it. The period of time is not as
- interesting as how the data is accessed.
-
- In my opinion, the floating nature is more interesting. If the data can
- be allowed to move around in memory then you get the full benefit of
- handles.
-
- In your specific case where the data will be allocated at startup and be
- locked for the duration, then there are two other approaches that you
- might consider.
-
- 1. Use NewPtr. This puts the data LOW and out of the way. If you are
- doing this at startup then it will be very low.
-
- 2. Use ReserveMem and NewHandle. Again this puts the memory low.
-
- MoveHHI is appropriate if the time period for use of the data is
- reasonably long _AND_ the data has to be locked (transient code resources
- like XCMD's). Reasonably long is usually considered shorter than the
- existance of the application ;-)
-
- Be aware. Copland Memory Managment will make the use of pointers (NewPtr)
- far more efficient. Handles will still be used (they do have there place)
- but there are significant advantages to pointers in Copland.
-
- Hope this helps,
-
- +-------------------------+--------------------------------------------+
- | Duane Murphy | My opinions are mine, mine, and only mine; |
- | Duane_Murphy@Novell.com | Except when they are also yours. |
- +-------------------------+--------------------------------------------+
-
- ---------------------------
-
- >From rclayton@yorick.umd.edu (Rodney Clayton)
- Subject: newbie. How to get open file dialog box.
- Date: 23 May 1995 14:56:40 GMT
- Organization: University of Maryland, College Park
-
- I have an application I ported from pc/dos. I would like to open
- files for input and output and have the mac generate the dialog
- box it usualy presents for most other applications. How do I go
- about doing this? I am using semantec c++.
- Thank's Rod
-
- +++++++++++++++++++++++++++
-
- >From uminger@mcs.drexel.edu (Lord of the Sith)
- Date: Tue, 23 May 95 18:21:05 GMT
- Organization: Drexel University, Dept. of Math. and Comp. Sci.
-
- Rodney Clayton (rclayton@yorick.umd.edu) wrote:
- : I have an application I ported from pc/dos. I would like to open
- : files for input and output and have the mac generate the dialog
- : box it usualy presents for most other applications. How do I go
- : about doing this? I am using semantec c++.
- : Thank's Rod
-
- StandardGetFile();
-
- I'm not sure of the parameter list right now, as I don't have books with me,
- but one of them is a StandardFileReply * which has as one it's members,
- an FSSpec, which is the basic way to identify a file on the macintosh.
-
- --
- Matt Inger
- uminger@mcs.drexel.edu
- http://mcs.drexel.edu/~uminger/
- "Remember when you were young? You shone like the sun."
-
- +++++++++++++++++++++++++++
-
- >From rclayton@yorick.umd.edu (Rodney Clayton)
- Date: 23 May 1995 20:14:44 GMT
- Organization: University of Maryland, College Park
-
- Lord of the Sith (uminger@mcs.drexel.edu) wrote:
- : Rodney Clayton (rclayton@yorick.umd.edu) wrote:
- : : I have an application I ported from pc/dos. I would like to open
- : : files for input and output and have the mac generate the dialog
- : : box it usualy presents for most other applications. How do I go
- : : about doing this? I am using semantec c++.
- : : Thank's Rod
-
- : StandardGetFile();
-
- : I'm not sure of the parameter list right now, as I don't have books with me,
- : but one of them is a StandardFileReply * which has as one it's members,
- : an FSSpec, which is the basic way to identify a file on the macintosh.
-
- : --
- : Matt Inger
- : uminger@mcs.drexel.edu
- : http://mcs.drexel.edu/~uminger/
- : "Remember when you were young? You shone like the sun."
- I was looking at the new INSIDE MACINTOSH books in the book store the
- other day. Do you happen to know which one this stuff would be in?
-
-
- +++++++++++++++++++++++++++
-
- >From andrew@adcode.demon.co.uk (Andrew)
- Date: 24 May 1995 00:50:13 +0100
- Organization: Adcode
-
- In article <1995May23.182105.475@mcs.drexel.edu>, uminger@mcs.drexel.edu
- (Lord of the Sith) wrote:
-
- > Rodney Clayton (rclayton@yorick.umd.edu) wrote:
- > : I would like to open files for input and output and have the mac generate
- > : the dialog box it usualy presents for most other applications. How do I go
- > : about doing this?
-
- When you say 'usually', it should always do this. That's what makes the
- mac the dog's bo**ocks. Mac programmers use the Mac toolbox where possible
- to make this kind of thing happen and that's why all (well-behaved)
- applications have a standard window (unlike windows apps).
-
- Here's how to do it:
-
- typedef OSType SFTypeList[4] // unless your compiler has this type
-
- OSErr GetTheFile (FSSpec &TheSpec)
- {
- StandardFileReply Reply; // holds the reply from dialog
- OSType TList // The file types we are looking for
- FileFilterProc FFilter // optional file filter
- short Ntps // number of types in TList
-
- FFilter = nil // see note on filter
- Ntps = 1 // we'll look at one type (see note)
- TList[0] = 'FFIL' // just look at type 1 fonts
-
- StandardGetFile(FFilter, Ntps, TList, &Reply);
- if (Reply.sfGood) // ie., user did not cancel
- {
- TheSpec = Reply.sfFile;
- return noErr;
- }
- else
- return -43; // ie., file not found
- }
-
-
-
- Other things in Reply are sfType (Type of file), sfFlags (finder flags of
- file), sfScript (Script of file - though just use zero)
-
- Standard file is the standard way of getting a file. To get a folder is a
- little more involved.
-
- The parameters to standard file are as follows:
-
- File filter function pointer: Use nil to ignore it but it allows you to
- use your own procedure for working out whether or not each item in the
- list is to be greyed out or selectable. It is useful if you are compiling
- a list of files and do not want the ones already selected to be
- re-selectable (if that's a word). Also useful for a 'get folder' routine -
- mre of that later.
-
- Number of file types - use zero to select from no files - sounds Irish but
- is useful for selecting folders. To do this, e-mail me. It's a B'stard.
- Use -1 to select from all file types.
-
- Type list: An array of longs which hold the types you are searching for:
- Fill out at least what you have specified in Number of File Types.
-
- Pointer to reply structure - useful parameters shown above.
-
- That's it really. The resulting reply can be used to operate on a file
- using the System 7 FS traps, or split off the vRefNum, DirID and name from
- the record and use the H traps instead.
-
- Good luck with the app, Andrew.
-
- --
- Andrew Crane, Egham, Surrey, England <andrew@adcode.demon.co.uk>
-
- ---------------------------
-
- End of C.S.M.P. Digest
- **********************
-